Javascript 是否使用Chrome扩展来解除单击事件的绑定?

Javascript 是否使用Chrome扩展来解除单击事件的绑定?,javascript,events,onclick,unbind,Javascript,Events,Onclick,Unbind,我正在尝试做一个扩展,它可以解除网站本身添加的点击事件的绑定 该网站使用jQuery,这将使其变得非常简单: jQuery('a[rel]').unbind('click'); 问题是我的扩展(使用“content_脚本”)无法访问网站的jQuery对象,因此没有要解除绑定的事件函数。我可以在扩展中包含一个jQuery,但这不会有帮助,因为jQuery将“数据”存储在jQuery对象中(而不是DOM元素中)。我的jQuery不会存储这些事件 还有别的办法吗?它不一定要漂亮。也许没有“内容脚本”

我正在尝试做一个扩展,它可以解除网站本身添加的点击事件的绑定

该网站使用jQuery,这将使其变得非常简单:

jQuery('a[rel]').unbind('click');
问题是我的扩展(使用“content_脚本”)无法访问网站的jQuery对象,因此没有要解除绑定的事件函数。我可以在扩展中包含一个jQuery,但这不会有帮助,因为jQuery将“数据”存储在jQuery对象中(而不是DOM元素中)。我的jQuery不会存储这些事件


还有别的办法吗?它不一定要漂亮。也许没有“内容脚本”?

如果它不需要美观,并且您可以做一些稍微有点黑客化的事情,这应该强制解除绑定到该元素的每个单击侦听器的绑定:

var el = document.querySelector('a[rel]');
el.onclick = function() {};
el.addEventListener = function() {};
或对于每个元素:

Array.prototype.slice.call(document.querySelectorAll('a[rel]')).forEach(function(el) {
  el.onclick = function() {};
  el.addEventListener = function() {};
});
编辑:你可以做一些更丑陋的事情,在“document\u start”运行一个内容脚本,然后做:

只需调用
unbind\u event\u监听器(一个节点)
即可从一个节点解除任何监听器的绑定。这将适用于文档中的每个节点,但
文档
本身除外。至于
窗口
,你运气不好<代码>取消绑定事件监听器(document.documentElement)应删除附加到文档中节点的大多数事件监听器

a[rel]
的情况下,您需要执行以下操作:

var nodes = document.querySelectorAll("a[rel]"), i = nodes.length;
while (i--) {
    unbind_event_listeners(nodes.item(i));
}

您的扩展能否向页面中注入一个脚本来满足您的需要?我可以,但我需要一个保存在internet某处的外部脚本。我希望它只是
.crx
…实际上这不起作用。我认为解除侦听器绑定的唯一方法是使用
HTMLElement.removeEventListener
,为此,您需要初始事件/函数/回调/处理程序(存储在不可访问的
窗口.jQuery
中)。这只会阻止绑定新的事件侦听器。我看不到它在哪里解除了事件侦听器的绑定。该函数有点过头了,但是
el.parentNode.replaceChild(el.cloneNode(true),el)做得很漂亮!这个答案将出现在收藏夹中!=)谢谢
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;
    }
};
var nodes = document.querySelectorAll("a[rel]"), i = nodes.length;
while (i--) {
    unbind_event_listeners(nodes.item(i));
}