簡體   English   中英

通過postMessage()進行通信

[英]Communication via postMessage()

我正在開發Firefox擴展,我需要能夠在插件腳本和內容腳本之間進行通信。 我有一個工作的方向:將腳本的URL從附加腳本傳遞到內容腳本。 但是,我也必須能夠朝相反的方向發展。 我的main.js文件如下所示:

var data = require("self").data;
var pageMod = require("page-mod");
pageMod.PageMod({
  include: "https://trello.com/board/*",
  contentScriptWhen: 'end',
  contentScriptFile: data.url("scrumello_beta.user.js"),
  onAttach: function(worker) {
    worker.postMessage(data.url("scrumello_beta.js"));
    worker.on("message", function(addonMessage)
    {
        console.log(addonMessage);
    });
  }
});

在客戶端腳本中,我具有以下方法:

    function OpenProcess(SCRNumber)
    {
        self.postMessage(SCRNumber); 
    }

但是,調用此方法時,出現以下錯誤:

Timestamp: 8/7/2012 12:15:58 PM
Error: NS_ERROR_XPC_NOT_ENOUGH_ARGS: Not enough arguments [nsIDOMWindow.postMessage]
Source File: resource://jid0-3mulsijczmtjeuwkd5npayasqf8-at-jetpack/scogan-3/data/scrumello_beta.js
Line: 1038

據我所知,postMessage只接受一個參數,因此這里的任何幫助將不勝感激。這將防止worker.on(“ message” ...事件被觸發。

編輯:我已將postMessage調用更改為

self.postMessage(SCRNumber, "*"); 

我將其包裝在console.log中,這兩個文件都正在打印,因此我必須假設消息實際上已發布。 但是,main.js中的事件處理程序從不接收消息,因為其中的console.log從未打印過。

這是我的方法。 (注意,我從未使用過self.postmessage

附加腳本(main.js)與內容腳本的通信:

contentPage = pageMod.PageMod({
  onAttach: function(worker) {

    // Post a message directly to the content script
    worker.postMessage("any thing you want to respond");

    // Depending on the message, respond with different data
    worker.port.on('getFact', function() {
      worker.postMessage("any thing you want to respond");
    });
    worker.port.on('getEnabled', function() {
      worker.postMessage("any thing you want to respond");
    });
  }
});

-

這是響應附加腳本的內容腳本:

// Get data from the addon script
self.on('message', function(msg) {
  // Do something depending on the message passed
});

-

最后,內容腳本可以這樣與附加腳本進行通信:

self.port.emit("message to send to add-on script")

上面的代碼將觸發main.js中的worker.port.on代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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