Firefox Addon sdk:不同contentScripts之间的通信

GIL*_*ILL 2 firefox-addon-sdk

我在Firefox Addon的main.js中有两个内容脚本:contentScript A在'panel'模块内(模块A)contentScript B在'page-mod'模块内(模块B)它们如何通信或交换消息?我尝试使用以下步骤执行此操作:1.将消息从contentScript A发送到AddonScript A 2.通过将模块B包含在A中,将消息从AddonScript A发送到AddonScript B 3.将消息从AddonScript B发送到contentScript B.但是,它不起作用(而是间歇性地工作,可能是由于代码中的一些错误)..这个方法好吗?任何人都可以评论任何更好的方法吗?.感谢名单

can*_*ani 6

由于SDK的安全模型,您的面板和page-mod之间的任何通信都需要通过主附加代码本身进行路由.下面是一个示例,它从Panel中实现的表单中获取数据,并通过主脚本将其发送到page-mod:

https://builder.addons.mozilla.org/addon/1035008/latest/

代码的关键是这一个:

var pagemod = require("page-mod").PageMod({
    include: [target],
    contentScriptFile: [data.url('jquery-1.7.1.min.js'), data.url('page-mod.js')],
    onAttach: function(worker) {
        // console.log('attached...');
        // when we get a panel-message event from the panel 
        panel.port.on('panel-message', function(data) {
            // we emit the same message through to the page-mod
            worker.port.emit('panel-message', data);
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

您会注意到,当附加了page-mod时,我设置了面板实例以捕获'panel-message'事件,然后将其直接发送到当前的page-mod工作器.