如何从XUL向嵌入式WebExtension发送消息

How to send message from XUL to embedded WebExtension

提问人:M.Onyshchuk 提问时间:9/24/2017 最后编辑:M.Onyshchuk 更新时间:9/24/2017 访问量:164

问:

我需要将设置从旧版本的扩展(XUL / Components.interfaces.nsIPrefService)迁移到新版本(WebExtension / browser.storage.sync)。为此,我从 Mozilla 迁移示例 (embedded-webextension-overlay) 导入了代码。在此示例中,使用 browser.runtime.sendMessage 从嵌入式 webextension 将数据从嵌入式 webextension 发送到覆盖代码。它工作正常。但是我需要改变方向,为此我在代码的覆盖部分调用browser.runtime.sendMessage,并收到消息: browser.runtime.sendMessage 不是一个函数 这是一个修改后的覆盖代码:

{
  const addonId = "[email protected]";
  const {
    AddonManager,
  } = Components.utils.import("resource://gre/modules/AddonManager.jsm", {});

  AddonManager.getAddonByID(addonId, addon => {
    const baseURI = addon.getResourceURI("/");

    const {
      LegacyExtensionsUtils,
    } = Components.utils.import("resource://gre/modules/LegacyExtensionsUtils.jsm");

    const myOverlayEmbeddedWebExtension = LegacyExtensionsUtils.getEmbeddedExtensionFor({
      id: addonId, resourceURI: baseURI,
    });

    myOverlayEmbeddedWebExtension.startup().then(({browser}) => {
      dump(`${addonId} - embedded webext started\n`);
      // My code
      browser.runtime.sendMessage({msg:"update-settings", data:my_data});
      /* Original Mozilla code
      browser.runtime.onMessage.addListener(msg => {
        dump(`${addonId} - received message from embedded webext ${msg}\n`);
        console.log(`===${addonId} - received message from embedded webext ${msg}\n`);
      });
      */
    }).catch(err => {
      Components.utils.reportError(`${addonId} - embedded webext startup failed: ${err.message} ${err.stack}\n`);
        console.log(`===${addonId} - embedded webext startup failed: ${err.message} ${err.stack}\n`);

    });
  });
}

我做错了什么?

javascript 狐 火 插件 xul 火狐插件 webextensions

评论


答:

1赞 Rob W 9/24/2017 #1

使用 等待旧版附加组件中的传入端口,然后从嵌入式 WebExtension 调用 browser.runtime.connect() 以打开端口。您应该在调用中设置一个名称,以便侦听器将仅使用专门用于迁移过程的端口。browser.runtime.onConnectconnectonConnect

下面是一个示例:https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Embedded_WebExtensions#Connection-oriented_messaging