【问题标题】:FF Addon (JPM) Pass message from Panel's script to main index scriptFF Addon (JPM) 将消息从 Panel 脚本传递到主索引脚本
【发布时间】:2017-01-05 17:32:30
【问题描述】:

我正在使用 JPM Addon 开发一个 FireFox 扩展。我正在从主 index.js 文件中加载一个面板,如下所示...

var panel = require('sdk/panel');
var panel = panel.Panel({
    contentURL: url('pages/popup.html'),
    onHide: doHide
});

//and in another place...
panel.show({
            position: button
        });

pages/popup.html 文件引用了一个 javascript 文件,我使用相对路径来加载它。我需要弄清楚如何将由面板网页加载的这个 javascript 文件中的消息传递到插件的主 index.js 脚本文件。

我尝试了 postMessage 以及 port.emit...

所以,要么

//index.js
panel = require("sdk/panel").Panel({
  onMessage: function(message) {
    console.log(message);
  }
});

//popup.js - panel file
panel.postMessage('something');

...或...

//index.js
panel.on("message", function(text) {
  console.log(text);
});

//popup.js
self.port.emit('message', 'hello world');

但是,这两种方法似乎都不起作用。救命!

【问题讨论】:

    标签: javascript message firefox-addon-sdk jpm


    【解决方案1】:

    您应该阅读MDN sdk/panel page 中的“Scripting trusted panel content”部分。最相关的文字是:

    与内容脚本一样,这些脚本可以使用postMessage() API 或port API 与插件代码进行通信。关键的区别在于这些脚本通过addon 对象访问postMessageport 对象,而内容脚本通过self 对象访问它们。

    所以,你的 popup.js 代码应该是:

    addon.port.emit('message', 'hello world');
    

    还有你的index.js

    panel.port.on("message", function(text) {
      console.log(text);
    });
    

    Scripting trusted panel content”部分中有一个示例插件,显示了受信任面板(面板内容来自插件内部)和插件的主后台脚本之间的双向通信。

    【讨论】:

    • 是否也可以从插件脚本中调用函数?实际上,我正在移植一个 Chrome 扩展程序,并且无法使用回调来满足我的需要。
    • @ShahidThaika,消息传递是异步的(可能从一个进程到另一个进程)。在 Chrome 中也是如此。如果您的意思是一个同步函数来发送来自附加脚本的消息,那么是的。对于上面的代码,那将是panel.port.emit(nameOfMessage,message);。顺便说一句:如果您正在移植 Chrome 扩展程序并且您还没有这样做,您可能需要查看 WebExtensions API,它与 Chrome 扩展程序非常相似。
    • 我在面板中使用了一个函数来根据浏览器的本地化返回一个字符串。但是,在 FF 中,您似乎需要使用 require('sdk/l10n').get,它只能通过 index.js 文件访问。我需要弄清楚如何调用本地化函数。
    • 嗨@Makyen,我想知道如何将消息表单面板脚本传递给内容脚本?
    • @vivek,这听起来应该是一个新问题:-)。除了简短的描述(因此是新问题)之外,还有更多的上下文会有所帮助。你有你已经尝试过的代码吗?你可能不得不去面板脚本⟷背景脚本⟷内容脚本。如何构建这将取决于您尝试做什么/交流以及您的附加组件有多复杂(例如,有多少内容脚本和面板脚本)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2011-06-26
    相关资源
    最近更新 更多