我正在尝试制作一个扩展程序来取消绑定(bind)网站本身添加的点击事件。
该网站使用 jQuery,这将使这变得非常简单:
jQuery('a[rel]').unbind('click');
问题是我的扩展(使用“content_scripts”)无法访问网站的 jQuery 对象,因此没有要解除绑定(bind)的事件函数。我可以在我的扩展中包含一个 jQuery,但这无济于事,因为 jQuery 将“数据”存储在 jQuery 对象中(而不是在 DOM 元素中)。我的 jQuery 不会存储这些事件。
还有别的办法吗?它不必很漂亮。也许没有“content_scripts”?
最佳答案
var unbind_event_listeners = function (node) {
var parent = node.parentNode;
if (parent) {
parent.replaceChild(node.cloneNode(true), node);
} else {
var ex = new Error("Cannot remove event listeners from detached or document nodes");
ex.code = DOMException[ex.name = "HIERARCHY_REQUEST_ERR"];
throw ex;
}
};
只需调用 unbind_event_listeners(a_node)
即可解除节点与任何监听器的绑定(bind)。这将适用于文档中的每个节点,除了 document
本身。至于 window
,你运气不好。 unbind_event_listeners(document.documentElement)
应该删除大多数附加到文档中节点的事件监听器。
对于a[rel]
,您需要这样做:
var nodes = document.querySelectorAll("a[rel]"), i = nodes.length;
while (i--) {
unbind_event_listeners(nodes.item(i));
}
关于javascript - 使用Chrome扩展解除绑定(bind)点击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5530843/