javascript - 使用Chrome扩展解除绑定(bind)点击事件?

标签 javascript events onclick unbind

我正在尝试制作一个扩展程序来取消绑定(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/

相关文章:

javascript - 在 React Native Webview 中使用本 map 片

javascript - AngularJs orderBy 很深的字段?

jquery - 当有人在 jQuery 中调用 text() 或 html() 时是否可以获取事件?

Jquery - 鼠标悬停 -> 淡入/淡出//单击 -> 不透明度 100%//其他单击 -> 不透明度 60

javascript - 如何在输入区域添加 onclick jquery 函数

javascript - 完美的Scrollbar简单间隙定制

internet-explorer - 焦点事件触发 IE 与现代浏览器中的输入事件

python - 元素的大小不会在 Kivy 中的应用程序加载时更新

javascript - 使用 on() jQuery 方法将 'this' 作为参数传递给事件处理程序

javascript - JQuery、谷歌地图和 $ ('#myId' ) == getElementById ("myId")