阻止新事件附加到元素

时间:2014-05-02 16:15:19

标签: javascript

我将事件绑定到元素。

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

我想阻止未知脚本使用我的元素。

1 个答案:

答案 0 :(得分:1)

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

如果你有未知脚本做坏事的问题,那么你可能最好不要采用支持方式,向上和描述你真正想要防范的内容,因为试图阻止事件监听器就像当他们已经在你的房子里自由漫游时,试图让某个人离开一个抽屉。您可能需要在更高的级别上保护事物。


如果你想进入" hacking"为了尝试阻止特定类型的代码,有一些选择。如果第三方代码想绕过它们,这些都不是万无一失的。换句话说,如果你能看到第三方代码的作用并且它不会适应自己以试图绕过你,这些会更有用:

首先,您可以在安装事件处理程序后替换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");
});

演示:http://jsfiddle.net/jfriend00/C5rzN/

这并非万无一失,因为还有其他方法可以安装直接从原型调用方法或使用onclick属性的事件处理程序。