我感谢浏览器在确定window.open()是否由点击触发时的工作方式,例如,只有当它来自真实元素的click事件时,才允许该点击。

我想自己写同样的逻辑,我该怎么做?

假设我有任何JS函数,可能从我的应用程序其余部分随处调用,有时在调用堆栈的开始处带有click事件处理程序,有时则没有。我如何在我的方法中知道这一点,而无需在我的应用程序中始终传递有关堆栈开始的信息(单击与否)?

function iNeedToKnowIfStackFrame0WasAClickEventListener() {
  var wasAClick = ???;
  if(wasAClick)
    window.open(...);
  else
    something.else();
}


谢谢

最佳答案

您可以使用this.event.type获取事件信息。
您可以像这样将事件传递给函数:

function iNeedToKnowIfStackFrame0WasAClickEventListener(event) {
    var wasAClick = event.type == "click";
    if(wasAClick)
        window.open(...);
    else
        something.else();
}


或者你可以取消这个活动

function iNeedToKnowIfStackFrame0WasAClickEventListener() {
    var wasAClick = this.event.type == "click";
    if(wasAClick)
        window.open(...);
    else
        something.else();
}

09-07 15:29