【问题标题】:How to implement message passing in Firefox extension?如何在 Firefox 扩展中实现消息传递?
【发布时间】:2012-01-03 19:00:22
【问题描述】:

我有一个覆盖overlay.xul 的文件,它覆盖了browser.xul。我想以与 chrome 扩展中实现的方式类似的方式实现消息传递。

chrome.manifest-

content helloworld content/
overlay chrome://browser/content/browser.xul    chrome://helloworld/content/overlay.xul
overlay chrome://navigator/content/navigator.xul    chrome://helloworld/content/overlay.xul


skin    helloworld  classic/1.0 skin/
style   chrome://global/content/customizeToolbar.xul    chrome://helloworld/content/overlay.css

我如何注册content_script.js,在我的例子中是overlay.js

Overlay.xul -

 <script type="application/x-javascript" src="chrome://helloworld/content/jquery.js" />
 <script type="application/x-javascript" src="chrome://helloworld/content/overlay.js" />
 <script type="application/x-javascript" src="chrome://helloworld/content/background.js" />

现在在我的overlay.js 中,我正在使用 -

document.documentElement.addEventListener('click', function(e) {

     messageManager.sendAsyncMessage('MyMessenger.MyMessage', {});

}, true);

background.js 是-

 addMessageListener("MyMessenger.MyMessage", function(obj) {

    Firebug.Console.log(obj.name);
}, true);
  • 消息传递的正确语法是什么?
  • 如何配置内容脚本和浏览器脚本的连接?

【问题讨论】:

    标签: firefox firefox-addon message-passing


    【解决方案1】:

    如果您真正感兴趣的只是注入内容脚本并与之通信,那么使用Add-on SDK 应该更容易,尤其是page-mod package。它允许轻松注入内容脚本并提供一种通信方式(请参阅我提到的文档中的“使用内容脚本通信”部分)。

    至于messageManager,它适用于多进程环境,但也适用于当前的单进程Firefox。上面代码的主要问题是:addMessageListener 不是全局函数,您应该调用messageManager.addMessageListener()。但是使用messageManager 在加载到同一个命名空间并且可以直接相互调用的脚本之间传递消息无论如何都是一种矫枉过正。

    要与当前选项卡中的内容脚本通信,叠加层中的脚本将执行以下操作:

    gBrowser.selectedBrowser.messageManager.sendAsyncMessage('MyMessenger.MyMessage', {});
    

    内容脚本确实将 addMessageListener 作为全局函数,所以这应该可以工作:

    addMessageListener("MyMessenger.MyMessage", function(obj) {
      console.log(obj.name);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多