1

一些网络

<SCRIPT SRC="js/tt2.js"></SCRIPT>

tt2.js

toggle=0;
function dblclick() {
    if (toggle==0) {
        var sc=99999; toggle=1;
    } else {
        var sc=0; toggle=0;
    }
    window.scrollTo(0,sc);
}
if (document.layers) {
    document.captureEvents(Event.ONDBLCLICK);
}
document.ondblclick=dblclick;

“document.ondblclick = null;” 是行不通的。如何使用 chrome 扩展删除(取消绑定)dblclick 事件?

4

1 回答 1

1

原因:

您可以覆盖document.ondblclick. 问题是上下文。您有 chrome 扩展上下文和页面上下文。

可能的上下文

为了进行测试,您可以在扩展中添加以下内容:

document.ondblclick = function () {
    alert("chrome extension ondblclick event");
}

您可以在这两种情况下查看事件:

每个上下文的事件回调

如果您触发此事件,您将看到两个事件都被调用。

解决方案:

您需要的是ondblclick在页面上下文中覆盖。真正简单的方法是将您自己的脚本添加到页面中 - 然后它将在页面上下文中运行。

要注入脚本,您可以编写inject.js

(function(){
    var scriptElement = document.createElement('script');
    scriptElement.setAttribute('type', 'text/javascript');
    scriptElement.setAttribute('src', chrome.runtime.getURL('js/ownOndblclick.js'));

    document.getElementsByTagName('head')[0].appendChild(scriptElement);
}());

你需要你必须注入的脚本。在这种情况下,这是ownOndblclick.js

document.ondblclick = function () {
    alert("free");
}

alert 仅用于测试。在您看到它按预期工作后将其删除。最后一步是调整manifest.json

{
    ...

    "permissions": [
        "http://whereever/*"
    ],

    "content_scripts": [
        {
            "matches": ["http://whereever/*"],
            "js": ["js/inject.js"]
        }
    ],

    "web_accessible_resources" : [
        "js/ownOndblclick.js"
    ]
}

而已。

注入的替代方法ownOndblclick.js是将其直接放入inject.js

(function(){
    var scriptElement = document.createElement('script');
    scriptElement.setAttribute('type', 'text/javascript');
    scriptElement.innerText = 'document.ondblclick = function () { alert("free");}';

    document.getElementsByTagName('head')[0].appendChild(scriptElement);
}());

然后你可以web_accessible_resourcesmanifest.json.

于 2013-10-03T11:53:24.260 回答