4

私は Fennec の単純な拡張機能に取り組んでいます。これは、読み込まれたすべてのページに特別な HTML 要素を追加する必要があります。この単純なoverlay.jsを作成しました:

var MyAddon = {
    onLoad: function(aEvent){
        var appcontent = document.getElementById("appcontent"); // Firefox
        if (!appcontent) {
            appcontent = document.getElementById("browsers"); // Fennec
        }
        if (appcontent) {
            appcontent.addEventListener("DOMContentLoaded", MyAddon.onDocumentLoad, true);
        }
    },

    onUnLoad: function(aEvent){
        var appcontent = document.getElementById("appcontent"); // Firefox
        if (!appcontent) {
            appcontent = document.getElementById("browsers"); // Fennec
        }
        if (appcontent) {
            appcontent.removeEventListener("DOMContentLoaded", MyAddon.onDocumentLoad, true);
        }
    },

    onUIReady: function(aEvent){
    },

    onUIReadyDelayed: function(aEvent) {
    },

    onDocumentLoad: function(aEvent) {
    alert("OK");
    }
};

window.addEventListener("load", MyAddon.onLoad, false);
window.addEventListener("unload", MyAddon.onUnLoad, false);
window.addEventListener("UIReady", MyAddon.onUIReady, false);
window.addEventListener("UIReadyDelayed", MyAddon.onUIReadyDelayed, false);

問題は、ブラウザの起動時にアラートが 1 回しか表示されないことです。ロードされるすべてのページにアラートが表示されることを期待しています。私は何を間違っていますか?

Fennec バージョン: 4.0b5 (Windows のデスクトップ バージョンでテスト中)

ありがとう!

4

1 に答える 1

4

残念ながら、これは Fennec にとってはより複雑です。コンテンツ ドキュメントからの「DOMContentLoaded」などのイベントはありません。これは、オーバーレイが Javascript をアタッチしたメイン ウィンドウが、子ウィンドウ (コンテンツ ウィンドウ) とは異なるプロセスに存在するためです。

必ず:

  1. 新しいタブごとにスクリプトをロードします。

    browser.messageManager.loadFrameScript("chrome://my_add_on/content/content.js", true);

  2. content.js 内で、イベント DOMContentLoaded をリッスンします。

    addEventListener("DOMContentLoaded", プロセス, true); 関数処理(イベント) { ... }

詳細については、次のページを確認してください。

于 2011-04-15T04:10:38.360 に答える