从main.js打开页面并将数据传递给它

时间:2014-10-29 15:54:34

标签: firefox-addon firefox-addon-sdk

我正在尝试创建一个非常简单的测试插件,它可以完成一件事:从main.js打开一个html页面(位于数据文件夹中),然后传递一些它可以显示的生成的JSON。我使用消息传递和克隆unsafeWindow.options找到了一种非常复杂的方法,但是必须有一种更简单的方法吗?

PS。我很高兴使用'插件页面'模块,如果这是正确的方法......

2 个答案:

答案 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 )。