如何将消息从XUL发送到嵌入式Web扩展

如何将消息从XUL发送到嵌入式Web扩展

问题描述:

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

{ 
    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`); 

    }); 
    }); 
} 

我在做什么错?

等待在遗留的传入端口插件使用browser.runtime.onConnect,并调用browser.runtime.connect()从嵌入式WebExtension打开port。您应该在connect调用中设置一个名称,以便onConnect侦听器仅使用专门用于迁移过程的端口。

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