簡體   English   中英

從firefox擴展中的加載腳本傳遞對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM