[英]Passing object from loaded script in firefox extension
我正在開發一個firefox擴展,可以從當前選項卡中的網頁檢索數據。 當用戶單擊覆蓋工具欄按鈕時,我正在將腳本加載到網頁中,該按鈕進行一些處理並從網頁中獲取信息。 我想在彈出窗口中顯示該信息。
我正在使用以下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錯誤。 我正在使用的代碼的詳細信息如下:
在疊加層的onCommand中,我正在調用以下函數:
var Popup = {
showPopup: function() {
window.open("chrome://dynamonote/content/popup.html", "dynamonote", "chrome");
}
};
這將顯示一個彈出窗口。 在頁面加載時調用的popup.html的初始化函數中,我正在執行以下代碼:
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));
})();
這個你能幫我嗎。
如果您想要經典Firefox擴展中的內容腳本,則mozIJSSubScriptLoader
是錯誤的工具-“內容腳本”將保留高級特權,並可能導致安全問題。 您可以改用消息管理器 (忽略有關進程分離的討論,它與桌面Firefox無關)。 因此,要將腳本加載到當前選擇的選項卡中,將使用以下代碼:
gBrowser.selectedBrowser.messageManager
.loadFrameScript("chrome://dynamonote/content/contentscript.js", true);
gBrowser.selectedBrowser.messageManager.addMessageListener("foomessage", onMessage);
function onMessage(obj)
{
alert("Received object from content script: " + obj.toSource());
}
請注意,當不再需要該消息偵聽器時,應將其刪除。 要將內容腳本發送回消息,將使用如下代碼:
sendAsyncMessage("foomessage", obj);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.