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