gpt4 book ai didi

firefox - 如何在 Firefox 扩展中实现消息传递?

转载 作者:行者123 更新时间:2023-12-03 17:57:53 25 4
gpt4 key购买 nike

我有一个覆盖 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);
  • 消息传递的正确语法是什么?
  • 如何配置内容脚本和浏览器脚本之间的连接?
  • 最佳答案

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

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

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

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

    并且内容脚本确实有 addMessageListener作为一个全局函数,所以这应该工作:
    addMessageListener("MyMessenger.MyMessage", function(obj) {
    console.log(obj.name);
    });

    关于firefox - 如何在 Firefox 扩展中实现消息传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8226042/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com