gpt4 book ai didi

javascript - 通过 postMessage() 进行通信

转载 作者:行者123 更新时间:2023-11-28 02:46:08 24 4
gpt4 key购买 nike

我正在开发 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

这可以防止触发worker.on("message"...事件。据我所知,postMessage只接受一个参数,所以这里的任何帮助将不胜感激。

编辑:我已将 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代码。

关于javascript - 通过 postMessage() 进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11850154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com