Javascript 来自不同ContentScript和main的Firefox SDK信息
希望我的问题还没有得到回答,因为有很多相关的问答。Javascript 来自不同ContentScript和main的Firefox SDK信息,javascript,firefox-addon,firefox-addon-sdk,message-passing,Javascript,Firefox Addon,Firefox Addon Sdk,Message Passing,希望我的问题还没有得到回答,因为有很多相关的问答。 首先,这是我的附加结构: addon/ data/ contentScript1.js lib/ lib1.js main.js 由于箭头在标记中不起作用,我将用以下文字来描述它:add-on是根目录,然后是两个文件夹:data和lib,还有一个文件:main.js。在dataliescontentScript1.js和liblieslib1.js中 首先,我想通过port.on和port.emit从co
首先,这是我的附加结构:
addon/
data/
contentScript1.js
lib/
lib1.js
main.js
由于箭头在标记中不起作用,我将用以下文字来描述它:add-on是根目录,然后是两个文件夹:data
和lib
,还有一个文件:main.js
。在data
liescontentScript1.js
和lib
lieslib1.js
中
首先,我想通过port.on
和port.emit
从contentScript1.js
获取消息:
//Part in main.js:
var emitTest = "test";
pageMod.PageMod({
include: "*",
contentScriptFile: [self.data.url("contentScript1.js")],
onAttach: function(worker) {
worker.port.on("clicked", function (data) {
if(data == "clickBox1"){
console.log(data); //this works
pageMod.PageMod({
include: "*",
contentScriptFile: [self.data.url("lib1.js")],
onAttach: function(worker2) {
worker2.port.emit("script2Test", "test");
worker2.port.emit("varTest", emitTest);
worker2.port.on("gotBack", function (data2) {
console.log(data2); //doesnt log
});
}
});
}
});
}
});
//Part in lib1.js:
self.port.on("script2Test", function(data) {
self.port.on("varTest", function(data2) {
self.port.emit("gotBack", functionInLib1(data, data2));
});
});
我跳过了contentScript1.js
,因为这两个(contentScript1
和main
)之间的消息传递工作正常
我现在的问题是:为什么标记的
console.log
不工作?我真的试着用port.on
和port.emit
传递消息 似乎将lib1.js放在lib文件夹中而不是数据文件夹中。既然你在使用
contentScriptFile: [self.data.url("lib1.js")],
您应该将lib1.js放在数据文件夹中。首先:谢谢您的回答!不幸的是,这并没有解决我的问题。此外,我在lib1.js中添加了一个console.log(data),它也没有被调用(直接在self.port.on(“script2Test”,function(data){)。您是否尝试在onAttach:function(worker2){之后添加一个日志以查看该部分是否工作?是的,我总是添加这样的“疑难解答”输出。但是我在stackoverflow问题中忽略了这些…并且控制台日志没有被调用(没有输出)我想你会发现,如果你刷新页面,应该调用console.log。应用pageMod后,内容脚本只在下一次页面刷新时加载。而且,每次发出“单击”时,它都会应用pageMod,使lib1.js运行两次。我不确定这是否是你想要的?如果你想应用contentScript在飞到当前页面时,请参阅Specially require(“sdk/tabs”).activeTab.attachGreat。感谢您的帮助!