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-extension context と page-context があります。

可能なコンテキスト

テストのために、次の拡張機能を追加できます。

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_resourcesその後、から削除できますmanifest.json

于 2013-10-03T11:53:24.260 に答える