Javascript调试 - 如何打破所有未知的点击事件

时间:2016-04-04 16:15:20

标签: javascript jquery debugging jquery-mobile javascript-events

所以我有一个jQuery移动项目,为了关闭(大多数)弹出窗口,我注意到我必须在弹出窗口以外的区域中单击两次。在这些情况下,第一次点击似乎从URL地址栏中删除了#&ui-state=dialog,而第二次实际删除了弹出窗口。

我已经检查了多个包含相同JS文件的内容,并且在查看源文件时只出现了一次。我正在直接刷新页面,因此也无法从导航中再次包含JS文件。据我所知(我很确定)没有多个自定义点击事件绑定到按钮上,触发弹出窗口(也许是幕后的jQuery Mobile,但不是自定义)。

有没有办法让我在调试时基本上监听所有点击事件,看看它们发生了什么?我在自定义JS代码中添加了中断,打开弹出窗口,它只执行一次。但是还有更多的事情发生,我不知道它的来源或我如何找到它。

1 个答案:

答案 0 :(得分:1)

您可以劫持addEventListener method,这样您就可以选择了解事件何时注册,甚至可以 该事件。

var oldAddEventListener = EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener = function(cb) {
  var customCB = function() {
    console.log('Hijacked event handler');
    return cb.apply(this, arguments);
  };

  console.log('Hijacked add event listener');
  return oldAddEventListener.apply(this, arguments);
};

如果您想捕获每个事件,请确保在任何其他附加代码之前加载此代码。

这是有效的,因为Element会从addEventListener继承EventTarget。通过在原型上覆盖该方法,这可以确保每个Element在附加事件侦听器时都会使用您的自定义方法。