拡張機能の古いバージョン(XUL/Components.interfaces.nsIPrefService)から新しいバージョン(WebExtension/browser.storage.sync)に設定を移行する必要があります。これを行うために、Mozillaの移行サンプル(埋め込みwebextension-overlay)からコードをインポートしました。この例では、browser.runtime.sendMessageを使用して埋め込まれたWeb拡張機能から、埋め込みWeb拡張機能からオーバーレイコードにデータが送信されます。それはうまく動作します。しかし、方向を変更する必要があります。これは、コードのオーバーレイ部分のbrowser.runtime.sendMessageを呼び出してメッセージが表示されます。 browser.runtime.sendMessageは関数ではありません。 これは変更されたオーバーレイコードです。XULから組み込みWebExtensionにメッセージを送信する方法
{
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`);
});
});
}
私は間違っていますか?