我的问题是:附加到标签的内容脚本没有收到消息"开始",然后不执行。
代码似乎是正确的,我找了一些相关的StackOverflow问题,但我没有找到解决方案。
代码是这样的:
main.js:
panel.port.on("process", function() {
tabs.open({
url: "./tab.html",
onOpen: function(tab) {
worker = tab.attach({
contentScriptFile: [ "./cs1.js", "./cs2.js", "./cs3.js" ],
contentScriptOptions: { data : data }
})
}
});
worker.port.emit("start", "start");
console.log("worker emitted start");
});
cs3.js:
self.port.on("start", function(start) {
// do stuff
消息"工作人员发出开始"因此我假设emit()
已被执行,但没有来自 cs3.js 的消息并且使用调试器我注意到 cs3.js 永远不会执行,尽管被加载。
答案 0 :(得分:0)
根据您提供的代码,问题在于您没有考虑您编写的代码的异步性质。
以下是代码中发生的事情的顺序:
tabs.open()
异步开始打开选项卡的过程。您可以指定在open
事件触发时调用的函数。"start"
在工作端口上发出。open
事件触发,内容脚本已附加。"start"
。正如您所看到的那样,在标签打开之前发出了"start"
,因此,在 cs3.js 中的工作人员被附加到标签之前。
以下内容应该有效:
main.js :
var worker;
panel.port.on("process", function() {
tabs.open({
url: "./tab.html",
onOpen: function(tab) {
worker = tab.attach({
contentScriptFile: [ "./cs1.js", "./cs2.js", "./cs3.js" ],
contentScriptOptions: { data : data }
})
worker.port.emit("start", "start");
console.log("emitted start to worker");
}
});
});