Firefox addon 从main.js打开页面并将数据传递给它
我试图创建一个非常简单的测试插件,它做一件事:从main.js打开一个html页面(位于数据文件夹中),然后将生成的JSON传递给它,它可以显示。我已经想出了一个非常复杂的方法,使用消息传递和克隆unsafeWindow.options来实现这一点,但必须有一个更简单的方法吗Firefox addon 从main.js打开页面并将数据传递给它,firefox-addon,firefox-addon-sdk,Firefox Addon,Firefox Addon Sdk,我试图创建一个非常简单的测试插件,它做一件事:从main.js打开一个html页面(位于数据文件夹中),然后将生成的JSON传递给它,它可以显示。我已经想出了一个非常复杂的方法,使用消息传递和克隆unsafeWindow.options来实现这一点,但必须有一个更简单的方法吗 另外,如果这是正确的方法,我很乐意使用“加载项页面”模块…您可以使用端口在其他视图中发送数据,如下所示: main.js // Create a menu panel var menu = panels.Panel({
另外,如果这是正确的方法,我很乐意使用“加载项页面”模块…您可以使用端口在其他视图中发送数据,如下所示: main.js
// Create a menu panel
var menu = panels.Panel({
contentURL: data.url("menu.html"),
contentScriptFile: data.url("menu.js"),
});
// Your data
var data = {animal: 'panda'};
menu.port.emit('data', JSON.stringify(data));
self.port.on('data', function onReceiveData(data) {
console.log(data);
});
menu.js
// Create a menu panel
var menu = panels.Panel({
contentURL: data.url("menu.html"),
contentScriptFile: data.url("menu.js"),
});
// Your data
var data = {animal: 'panda'};
menu.port.emit('data', JSON.stringify(data));
self.port.on('data', function onReceiveData(data) {
console.log(data);
});
一个简单的模板,用于打开选项卡,然后在选项卡准备就绪时,附加内容脚本,传递一些参数,并设置消息处理程序: 插件模块中:
var resourceURL=require("sdk/self").data.url;
require("sdk/tabs").open({
url:resourceURL("index.html"),
onReady:function(tab){
var worker=tab.attach({
contentScriptFile:["support.js","content.js"].map(resourceURL),
contentScriptOptions:{}, //parameters passed to content script
});
worker.port.on("ready",function(msgIn){
worker.port.emit("acknowledge",msgOut);
});
}
});
在内容脚本中;要发送“就绪”消息并接收“确认”消息:
参数
url
和/或contentScriptFile
的处理可能会发生更改,这样就可以在不需要require(“sdk/self”).data.url的情况下允许相对路径。不确定这是否只是猜测/提议,或者目前是否已实施;我还没查过
另外,我认为自从升级到australis UI后,
加载项页面被贬低了,并且没有起作用(即导航栏不再为诸如:addons之类的特殊URI隐藏)。@EpokK我不知道你在说什么。你指责我抄袭的地方或对象是谁?我只是看了一下我的一些旧的指导代码(在我这么做之前就已经很旧了)。我很确定最初的提问者想要打开一个新的选项卡,并将内容文件(html、脚本)加载到选项卡中。此外,如果您打算将数据用于console.log以外的其他用途,则在通过菜单.port.emit
发送之前,您可能应该JSON.stringify(data)
。是的,我需要在普通选项卡中打开html页面,而不是在面板中。