【问题标题】:How do I migrate a legacy XPCOM extension to WebExtensions?如何将旧版 XPCOM 扩展迁移到 WebExtensions?
【发布时间】:2017-08-29 21:19:52
【问题描述】:

Embedded WebExtensions 讲述了如何“......将 WebExtension 嵌入到经典的引导扩展或 Add-on SDK 插件中。”

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

我尝试添加

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

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

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

【问题讨论】:

    标签: firefox-addon xul firefox-addon-webextensions firefox-addon-overlay


    【解决方案1】:

    our tracking bug,一位用户发布了一个有用的链接:

    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 代码为您做的事情。

    【讨论】:

      【解决方案2】:

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

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

      Porting a legacy Firefox extension

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

      【讨论】:

      • 因此标题中的“迁移”一词,我希望能够将数据迁移到webext版本中。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-05-20
        • 1970-01-01
        • 1970-01-01
        • 2020-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多