2

我经营一个电子商务网站,我们有各种第三方 JavaScript,它们向链接和表单添加点击处理程序,然后插入延迟以确保跟踪通过。通过消耗 CPU 并运行 for 或 while 循环来插入延迟,直到某个日期过去 350 毫秒(Marketo / Munchkin)或 Visual Website Optimizer 的 500 毫秒。加起来几乎是 1 秒!

有时,也许延迟很好,所以跟踪可以更可靠。但是,当您单击我们网站上的大多数链接时,我们不希望发生这种情况,因为它会为用户增加最多 1 秒的延迟。有了这么大的延迟,我们已经完成了所有其他性能优化!

不幸的是,我们需要这些脚本的很多功能(如 Visual Website Optimizer 和 Marketo),所以我们无法删除它们。

鉴于我没有对它们的引用,是否可以删除他们添加的处理程序或阻止它们触发?

4

4 回答 4

2

您可以使用unbind删除事件。

如果您需要知道事件名称或类型,可以使用Chrome 开发工具查看

另一种方法是捕获事件并停止传播

编辑: 如果事件如果没有使用 jQuery 启动,则可以使用removeEventListener或将属性 event设置为null

于 2015-11-21T12:06:18.823 回答
0

如果没有对处理函数的引用,您无法删除事件侦听器,但您可以做的是克隆元素。

var elements = document.getElementsByTagName('a');
for(var i =0 ; i < elements.length; i++){
    var cloned = elements[i].cloneNode(true);
    elements[i].parentNode.replaceChild(cloned, elements[i])
}
于 2015-11-21T12:10:49.673 回答
-1

您可以使用纯 javascript 来删除事件侦听器,

在您的程序开始时,只需调用一个函数来删除事件侦听器,就像这样

var domElement = document.getElementById('elementWithEventListener');
domElement.removeEventListener('click',listener)

是的,你必须找出哪些听众被解雇了。

查看事件监听器以获取更多信息。

于 2015-11-21T21:00:49.310 回答
-1

那么另一种解决方法可能是更改 setTimeout 功能以在没有延迟或延迟较小的情况下工作

window.oldSetTimeout = window.setTimeout;
window.setTimeout = function(func, delay) {
   //change the delay value here
   return window.oldSetTimeout(function() {
       func();
   }, delay);
};
于 2015-11-21T20:41:50.797 回答