繁体   English   中英

如何将旧版XPCOM扩展迁移到WebExtensions?

[英]How do I migrate a legacy XPCOM extension to WebExtensions?

嵌入式WebExtensions讨论了如何“......将WebExtension嵌入到经典的自举扩展程序或附加SDK插件中”。

但我既没有“bootstrapped”也没有“Add-on SDK”扩展,只有十年之久的旧XPCOM /覆盖扩展。 我没有bootstrap.js来启动,也没有使用Add-on SDK。

我尝试添加

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

但所有完成的工作完全破坏了扩展, 它只加载(空)新的bootstrap.js文件。

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

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

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

这肯定相当于bootstrap / SDK代码为您做的事情。

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

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

请参阅移植旧版Firefox扩展

[edit]“嵌入式WebExtension”确实需要你的“外部”扩展来引导或基于附加SDK(所以没有“经典”扩展),但它只是用于逐步迁移,不会起作用在Firefox 57中。

没有方便的方法直接这样做。

最有效的方法是:

  1. 将您的扩展名重写为WebExtension。 考虑到WebExtensions的限制,尽可能多地发挥功能。
  2. 然后,添加一个bootstrap或Add-on SDK(更简单的)包装器,它只传输来自原始基于overlay的扩展的数据。 因此,扩展的bootstrap / Add-on SDK部分将是最小的,其中唯一的任务是启动WebExtension(每次加载扩展时)并传输数据(一次)。

虽然这不允许逐步迁移到WebExtension,这是使用嵌入式WebExtensions的假设好处之一,但它允许您将数据从覆盖扩展迁移到基于WebExtensions的版本。

你可以先将它转换为bootstrapped / Add-on SDK然后嵌入WebExtensions然后完整的WebExtension,但这将是更多的工作,没有任何显着的好处。

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

使用“ 导出” ,将提示用户将其完整数据保存到硬盘。

然后,下一次升级将是WebExtension,提示用户导入已保存的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM