4

Embedded WebExtensions讨论了如何“......将 WebExtension 嵌入到经典的引导扩展或 Add-on SDK 附加组件中”。

但我既没有“引导”也没有“附加 SDK”扩展,只有十年前的普通 XPCOM/overlay 扩展。我没有用于启动的bootstrap.js,也没有使用 Add-on SDK 来做任何事情。

我尝试添加

<em:bootstrap>true</em:bootstrap>

但所做的只是完全破坏扩展,它只加载那个(空的)新的bootstrap.js文件。

确实,我想迁移:我的经典扩展的数据需要导出到 webext 版本,以获得良好的用户体验。

4

3 回答 3

3

我们的跟踪错误中,一位用户发布了一个有用的链接:

https://github.com/mdn/webextensions-examples/tree/master/embedded-webextension-overlay

归结为

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`);
  browser.runtime.onMessage.addListener(msg => {
    dump(`${addonId} - received message from embedded webext ${msg}\n`);
  });
}).catch(err => {
  Components.utils.reportError(
    `${addonId} - embedded webext startup failed: ${err.message} ${err.stack}\n`
  );
});

这肯定等同于引导程序/SDK 代码为您所做的。

于 2017-08-30T13:14:39.020 回答
1

您只能使用 WebExtension API 从头开始​​重写它。

请注意,WebExtensions 模型要求您只使用显式导出以供扩展使用的 API,因此请准备在重写期间删除一些功能,甚至发现完全重新实现扩展是不可能的(除非您说服 Mozilla 实现新的 API您需要或在 WebExtension 实验中自己实现它——仍然仅限于 Nightly/Dev.edition)。

请参阅移植旧版 Firefox 扩展

[编辑]“嵌入式 WebExtension”确实需要引导您的“外部”扩展或基于附加 SDK(因此没有“经典”扩展),但它仅用于逐步迁移并且不会工作在火狐 57 中。

于 2017-08-29T23:35:33.830 回答
1

我向处于类似情况的人们建议的一种选择是在当前的旧插件中提供导出功能,在 WebExtension 版本中提供导入。虽然它不是自动迁移(必须是用户操作),但它克服了 WebExtension 本地文件访问的一些限制。

使用Export,将提示用户将其完整数据保存到硬盘。

然后下一个升级,即 WebExtension,提示用户导入保存的数据。

于 2017-08-30T05:09:36.083 回答