Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阻止将新事件附加到元素_Javascript - Fatal编程技术网

Javascript 阻止将新事件附加到元素

Javascript 阻止将新事件附加到元素,javascript,Javascript,我正在将事件绑定到元素 如何防止新的JavaScript事件绑定到它 我想阻止未知脚本播放我的元素。无法阻止未知脚本将事件侦听器附加到对象。浏览器不提供该功能。浏览器确实会阻止从其他域(其他窗口、选项卡或框架)运行的脚本干扰您的DOM,但是如果脚本位于同一个域中,甚至位于同一个页面中,则可以自由地对该页面中的DOM执行任何操作 如果你对未知脚本做不好的事情有问题,那么你最好把它备份起来,向上描述你真正想要保护的东西,因为试图阻止事件侦听器就像试图阻止某人在你家里自由漫游时离开一个抽屉。您可能需要

我正在将事件绑定到元素

如何防止新的JavaScript事件绑定到它


我想阻止未知脚本播放我的元素。

无法阻止未知脚本将事件侦听器附加到对象。浏览器不提供该功能。浏览器确实会阻止从其他域(其他窗口、选项卡或框架)运行的脚本干扰您的DOM,但是如果脚本位于同一个域中,甚至位于同一个页面中,则可以自由地对该页面中的DOM执行任何操作

如果你对未知脚本做不好的事情有问题,那么你最好把它备份起来,向上描述你真正想要保护的东西,因为试图阻止事件侦听器就像试图阻止某人在你家里自由漫游时离开一个抽屉。您可能需要在更高的级别上确保安全


如果您想进入“黑客”领域,试图阻止特定类型的代码,有一些选项。如果第三方代码想要绕过它们,这些并不是万无一失的。换言之,如果您能看到第三方代码的功能,并且它不会自行调整以试图绕过您,那么这些将更有用:

首先,您可以在安装事件处理程序后替换
elem.addEventListener()
,这将防止其他代码在该对象上再次使用
elem.addEventListener()

var item = document.getElementById("test");
item.addEventListener("click", function() {
    log("original event handler");
});

// install "do nothing" override method
item.oldAddEventListener = item.addEventListener;
item.addEventListener = function() {};

// this one will do nothing because addEventListener has been replaced
item.addEventListener("click", function() {
    log("2nd event handler");
});
演示:


这并不是万无一失的,因为还有其他方法可以直接从原型或使用
onclick
属性安装调用该方法的事件处理程序覆盖以前附加的事件侦听器?感谢您的确认。我从jQuery中看到了event.stopImmediatePropagation(),它保持其余处理程序的执行。如果我在未知脚本之前将我的处理程序附加到一个元素,并调用stopImmediatePropagation,它应该可以防止触发不需要的事件,不是吗?@arsenik-我认为
stopImmediatePropagation()
只会阻止其他jQuery事件处理程序执行(使用jQuery添加的事件处理程序),不是与普通JS一起安装的事件处理程序。你到底想在这里做什么?我试图阻止安装的第三方脚本(广告软件)用户操纵我页面的某些元素。我不想完全禁用此第三方脚本,只是为了防止它与某些元素交互(结束、更改外观等)。@arsenik-如果您更具体地说明广告软件的具体操作,您会得到更好的反馈,因为这里没有通用的答案,你只能尝试打败广告软件正在做的事情。我确实在我的答案中添加了一个具体的想法。谢谢,你的例子很有意义,并且给了我一些防止这种情况发生的想法。广告软件代码经过了很好的修饰,我只能猜测它用来附加事件的是什么。我会试一试,让你知道。