gpt4 book ai didi

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

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

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

{
const addonId = "myAddon@mySite.com";
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

关于javascript - 如何从 XUL 向嵌入式 WebExtension 发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46389508/

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