3

ページが読み込まれるたびにJavaScriptコードの一部を自動的に実行するモバイルFirefoxプラグインを作成しようとしています。以前のバージョンのFennecのコードをいくつか作成しましたが、新しいバージョンのFennec(https://wiki.mozilla.org/Mobile/Fennec/Extensions/Electrolysis/)のマルチプロセッシングシステムでは、このコードは移植されました。私はhttp://people.mozilla.com/~mfinkle/tutorials/のチュートリアルに基づいて、ブラウザメニューでオプションが選択されるたびにコードの一部を実行するバージョンを機能させました。このソリューションは、overlay.js(メイン(アプリケーション)プロセス用)とcontent.js(子(コンテンツ)プロセス用)の2つの部分で構成されています。Overlay.jsはoverlay.xulに読み込まれ、content.jsはoverlay.jsの次のコードを介して新しいタブに読み込まれます。

window.messageManager.loadFrameScript("chrome://coin/content/content.js", true);

overlay.jsのコードは、ブラウザメニューのオプションがクリックされるたびにcontent.jsにメッセージを送信し、必要なコードが正しく実行されます(一部のスクリプトタグはページの先頭に追加されるだけです)。ただし、ページの読み込み時にコードを自動的に実行する方法がわかりません。content.jsで次のことを試しました。

function addCoin(aMessage) { ... }

// this executes the desired code every time an option is clicked in the browser menu
addMessageListener("coin:addCoin", addCoin);

// this attempts to execute the code on every page load; i.e., after this script has     
been loaded for the new tab
addCoin(null);

ただし、最後のステートメントは効果がありません。次に、最後に次のステートメントを追加してみました。

sendAsyncMessage("coin:scriptLoaded", { });

このステートメントは、overlay.jsスクリプトにメッセージを送信します。このスクリプトは、このメッセージのリスナーを登録し、それに応じて、ブラウザーメニューのオプションがクリックされたときと同じメッセージ(「coin:addCoin」)を送信します。しかし、これもうまくいきませんでした。最後に、overlay.jsスクリプトがリッスンできる特定のイベント(「tabOpened」など)を探してみましたが、何も見つかりませんでした。

ページが読み込まれるたびにコードを自動的に実行する方法について誰かがアイデアを持っていますか?

よろしく、

ウィリアム

4

2 に答える 2

3

content.jsスクリプトでは、古い単一プロセスのFirefoxの場合と同じように、「ロード」イベントのイベントリスナーを登録するだけです。

addEventListener("load", someFunc, true);

これにより、Webページがタブに読み込まれるたびに「someFunc」が呼び出されます。

content.jsのグローバルコードは、ページが読み込まれるときではなく、タブが最初に作成されるときに実行されます。グローバルコードを使用して、イベントリスナーまたはメッセージリスナーを設定します。Webコンテンツは、content.js(子スクリプト)でキャッチできるイベントを引き続き発生させます。

于 2011-07-15T05:24:46.217 に答える
1

これは私のために働いた。

content.js

var addEventListener;

if (window.BrowserApp) { // We are running in Mobile Firefox
    addEventListener = window.BrowserApp.deck.addEventListener;
} else {
    var appcontent = document.getElementById("appcontent");
    if (appcontent) {
        addEventListener = appcontent.addEventListener;
    }
}

if (addEventListener) {

    var onDOMContentLoaded = function() { /* Code here */ };
    addEventListener("DOMContentLoaded", onDOMContentLoaded, true);

    var onLoad = function() { /* Code here */ };
    addEventListener("load", onLoad, true);

    // etc ...
}
于 2013-06-17T15:18:23.200 に答える