我在Firefox Addon的main.js中有两个内容脚本:
contentScript A在“面板”模块内(模块A)
contentScript B在“page-mod”模块内(模块B)
他们如何交流或交换消息?
我尝试通过以下步骤来做到这一点:1.从contentScript A向AddonScript A发送消息2.通过将模块B包含在A中,从AddonScript A向AddonScript B发送消息3.从AddonScript B向contentScript B发送消息。
但是,它不起作用(而是间歇性地起作用,可能是由于代码中的某些错误)。

这种方法可以吗?
有人可以对任何更好的方法发表评论吗?

谢谢

最佳答案

由于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);
        });
    }
});

您会注意到,当附加了page-mod时,我将设置面板实例以捕获“panel-message”事件,然后将其直接发送到当前的page-mod worker中。

关于firefox-addon-sdk - Firefox Addon SDK:不同内容脚本之间的通信,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8884478/

10-16 00:00