firefox-addon - Firefox 网络扩展 自动更新未列出和自托管的扩展

标签 firefox-addon firefox-addon-webextensions

我有一个从 chrome 移植的 Firefox 网络扩展。这是一个特定于站点的扩展,我将它托管在我的网络服务器上,以避免在开发者中心进行冗长的审查时间。

用户通过单击我的网页的按钮安装扩展程序。假设当前版本的扩展是3。按钮点击处理程序是这样的

document.getElementById('install_ext').addEventListener('click', function (e) {
    window.location.href = '/public/ffext_3.xpi';
});

当构建了新版本的扩展时,比如版本 4,我正在删除现有的 ffext_3.xpi 文件,在公共(public)文件夹中添加新的 ffext_4.xpi 文件并将 js 中的 href 修改为 '/public/ffext_4.xpi' on服务器。还有一些 UI 级别的处理,例如如果扩展不存在则显示安装按钮,如果更新可用则显示更新按钮等

到目前为止,一切都在工作。但是有一些机械的事情正在做。
  • 我必须手动修改js文件中的href。
  • 用户必须在 UI 提示时手动更新扩展。

  • 我尝试使用 InstallTrigger 对象,但我也必须提供其中包含版本号的完整 xpi url。
    document.getElementById('install_ext').addEventListener('click', function (e) {
        var params = {
            "MyExtension": {URL: 'https://addons.mozilla.org/firefox/downloads/file/12345/myext-0.1.2-fx.xpi',
                IconURL: '/public/exticon.png',
                Hash: 'sha1:1234567890abcdefghij1234567890abcdefghij',
                toString: function () {
                    return this.URL;
                }
            }
        };
        InstallTrigger.install(params);
    });
    

    我不确定每次上传新扩展时是否必须更新此 URL。我试图避免审查延迟,因此,我不想使用 InstallTrigger 方式,除非它是自动更新用户浏览器扩展的唯一方式。

    有没有办法在没有用户干预的情况下自动更新扩展?我在想,如果可以进行自动更新,我可以避免更改 xpi 的文件名,并将 href 设置为“/public/ffext.xpi”。我是对的还是我需要继续更新网址,即使有自动更新机制?

    最佳答案

    MDN 的 Updates page涵盖为附加组件设置自动更新。对于托管在 AMO 上的附加组件,这是无需附加开发人员做任何事情的情况下处理的。

    您需要有一个可以为您的用户提供 JSON 格式的更新 list 的 URL。

    网络扩展:
    对于 WebExtensions,您需要设置 update_url在 manifest.json 中键入更新 list 的 URL。举个例子(来自上面的 MDN 页面:

    "applications": {
      "gecko": {
        "update_url": "https://example.com/updates.json"
      }
    }
    

    所有其他类型的附加组件:
    对于非 WebExtension 插件,此 URL 设置在 instal.rdf文件。 [WebExtensions 没有 instal.rdf 文件,其他类型的附加组件没有 manifest.json 文件。1] 这样的 instal.rdf 条目看起来像(添加到 <Description about="urn:mozilla:install-manifest"> 元素):
    <em:updateURL>https://example.com/updates.json</em:updateURL>
    

    更新 list

    一个示例更新 list 可能看起来像(与所有代码一样,来自上面的 MDN 更新页面):
    {
      "addons": {
        "addon@example.com": {
          "updates": [
            { "version": "0.1",
              "update_link": "https://example.com/addon-0.1.xpi" },
            { "version": "0.2",
              "update_link": "http://example.com/addon-0.2.xpi",
              "update_hash": "sha256:fe93c2156f05f20621df1723b0f39c8ab28cdbeec342efa95535d3abff932096" },
            { "version": "0.3",
              "update_link": "https://example.com/addon-0.3.xpi",
              "applications": {
                "gecko": { "strict_min_version": "44" } } }
          ]
        }
      }
    }
    

  • 您可以在附加 SDK 扩展或 Bootstrap/Restartless 附加 (Embedded WebExtensions) 中使用 WebExtension。如果您在基于 Add-on SDK 的插件中执行此操作,您可能拥有用于描述 Firefox 插件的所有文件。打包附加 SDK 扩展之前的 package.json(附加 SDK)和 manifest.json(WebExtension)。打包后(例如 jpm xpi ),它会有一个 install.rdf 并且可能有一个 chrome.manifest (两者都用于所有其他类型的 Firefox 附加组件)。
  • 关于firefox-addon - Firefox 网络扩展 自动更新未列出和自托管的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40541561/

    相关文章:

    firefox - 如何为 Firefox 设置插件商店图标

    javascript - 这个 JavaScript 语法 : {Ci, CC} 是什么?

    javascript - 如何记录301重定向URL?

    javascript - 如何在 Firefox 中访问 Jetpack 内置扩展的后台页面?

    javascript - Firefox WebExtentionexecuteScript runAt无知

    javascript - 如何使用 fetch 在 firefox 或 chrome 扩展程序中获取网页的 HTML 源代码?

    javascript - 用于多显示器和全屏的 Firefox Web 扩展 APIS

    android - WebExtensions 可以在 Android 版 Firefox 上使用吗

    javascript - 从浏览器扩展调用网页 JavaScript 方法

    javascript - 从 Firefox 扩展 (XUL) 读取网页 cookie