現在のタブのWebページからデータを取得するFirefox拡張機能を開発しています。ユーザーがオーバーレイツールバーボタンをクリックすると、スクリプトがWebページに読み込まれます。このボタンは、処理を実行し、Webページから情報を取得します。その情報をポップアップウィンドウに表示したい。
次のAPIを使用してスクリプトをロードしています。
var loader = Components.classes[ "@mozilla.org/moz/jssubscript-loader;1" ].getService( Components.interfaces.mozIJSSubScriptLoader );
loader.loadSubScript("chrome://dynamonote/content/contentscript.js");
contentscript.jsで作成したオブジェクトを送信し、ユーザーがツールバーアイコンをクリックしたときに表示されるpopup.htmlに表示する必要があります。
コードを実行すると、gBrowser isnotdefinedエラーが発生します。私が使用しているコードの詳細を以下に示します。
オーバーレイのonCommandで、次の関数を呼び出しています。
var Popup = {
showPopup: function() {
window.open("chrome://dynamonote/content/popup.html", "dynamonote", "chrome");
}
};
ポップアップウィンドウが表示されます。ページの読み込み時に呼び出されるpopup.htmlのinit関数で、次のコードを実行しています。
function loadContentScript() {
Components.utils.reportError("loadContentScript() called");
gBrowser.selectedBrowser.messageManager.loadFrameScript("chrome://dynamonote/content/contentscript.js", true);
gBrowser.selectedBrowser.messageManager.addMessageListener("foomessage", onMessage);
Components.utils.reportError("loadContentScript() executed");
}
次のコードがcontentscript.jsファイルで実行されます。
(function() {
Components.utils.reportError("-- content script -- ");
var doc = content.document;
//Do something here
var data = {
"time": new Date().toLocaleString()
};
Components.utils.reportError("-- content script -- found something");
sendSyncMessage("foomessage", onMessage(data));
})();
これを手伝ってください。