Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自不同ContentScript和main的Firefox SDK信息_Javascript_Firefox Addon_Firefox Addon Sdk_Message Passing - Fatal编程技术网

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
lies
contentScript1.js
lib
lies
lib1.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。感谢您的帮助!