如何取消绑定带有chrome扩展名的document.ondblclick

时间:2013-10-01 12:02:20

标签: javascript google-chrome google-chrome-extension

某些网站

<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事件?

1 个答案:

答案 0 :(得分:1)

<强>原因:

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

possible context

对于测试,您可以在以下内容中添加以下内容:

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

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

event callbacks on each context

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

<强>解决方案:

您需要在页面上下文中覆盖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");
}

警报仅用于测试。看到它按预期工作后删除它。 最后一步是调整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_resources删除manifest.json