![](/img/trans.png)
[英]How to get Windows username in a legacy (not WebExtensions) Firefox add-on?
[英]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)。
[edit]“嵌入式WebExtension”确实需要你的“外部”扩展来引导或基于附加SDK(所以没有“经典”扩展),但它只是用于逐步迁移,不会起作用在Firefox 57中。
没有方便的方法直接这样做。
最有效的方法是:
虽然这不允许逐步迁移到WebExtension,这是使用嵌入式WebExtensions的假设好处之一,但它允许您将数据从覆盖扩展迁移到基于WebExtensions的版本。
你可以先将它转换为bootstrapped / Add-on SDK然后嵌入WebExtensions然后完整的WebExtension,但这将是更多的工作,没有任何显着的好处。
我向类似情况的人建议的一个选项是在当前的旧版插件中提供导出功能,在WebExtension版本中提供导入 。 虽然它不是自动迁移(必须是用户操作),但它克服了WebExtension本地文件访问的一些限制。
使用“ 导出” ,将提示用户将其完整数据保存到硬盘。
然后,下一次升级将是WebExtension,提示用户导入已保存的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.