我正在尝试创建一个非常简单的测试插件,它可以完成一件事:从main.js打开一个html页面(位于数据文件夹中),然后传递一些它可以显示的生成的JSON。我使用消息传递和克隆unsafeWindow.options找到了一种非常复杂的方法,但是必须有一种更简单的方法吗?
PS。我很高兴使用'插件页面'模块,如果这是正确的方法......
答案 0 :(得分:0)
您可以使用端口在其他视图中发送数据,如下所示:
<强> 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));
<强> menu.js 强>
self.port.on('data', function onReceiveData(data) {
console.log(data);
});
答案 1 :(得分:0)
用于打开选项卡的简单模板,然后在选项卡准备就绪时,附加内容脚本,传递一些参数以及设置消息处理程序:
在插件模块中:
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);
});
}
});
在内容脚本中;发送&#34;准备好&#34;消息并收到&#34;确认&#34;消息:
self.port.on("acknowledge",function(msgIn){});
self.port.emit("ready",msgOut);
参数url
和/或contentScriptFile
的处理可能会发生变化,因此在不需要(&#34; sdk / self&#34;)的情况下允许相对路径。 data.url。不确定这只是推测/提案还是目前正在实施;避风港检查过。
此外,我认为addon-page
已被折旧,并且自从升级到australis UI后无法使用(即导航栏不再隐藏用于特殊URI,例如 about:addons )。