Firefox网络扩展程序自动更新未列出和自托管的扩展程序

时间:2016-11-11 05:18:38

标签: firefox-addon firefox-webextensions

我有一个从chrome移植的firefox Web扩展。这是一个特定于站点的扩展,我在我的Web服务器上托管这个扩展,以避免在开发人员中心上花费很长的时间。

用户通过点击我的网页上的按钮来安装扩展程序。让我们说当前版本的扩展名为3.按钮点击处理程序就像这样

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

如果有新版本的扩展版本,比如版本4,我将删除现有的ffext_3.xpi文件,在公共文件夹中添加新的ffext_4.xpi文件,并将js中的href修改为' / public /ffext_4.xpi'在服务器上。如果扩展不存在,还有一些UI级别处理,如show install按钮,如果有更新,则显示更新按钮等等

到目前为止,一切正常。但是有一些机械方面的事情已经完成。

  1. 我必须手动修改js文件中的href。

  2. 用户必须在UI提示时手动更新扩展程序。

  3. 我尝试使用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);
    });
    

    我不确定每上传新扩展程序是否必须更新此网址。我试图避免审查延迟,所以,我不想使用InstallTrigger方式,除非它是自动更新用户扩展的唯一方法'浏览器。

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

1 个答案:

答案 0 :(得分:8)

MDN的Updates page涵盖为加载项设置自动更新。对于AMO上托管的附加组件,无需附加开发人员即可执行此操作。

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

<强> WebExtensions:
对于WebExtensions,您需要在 manifest.json 中将update_url密钥设置为更新清单的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>

更新清单

示例更新清单可能看起来像(与上面的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" } } }
      ]
    }
  }
}
  1. 您可以在Add-on SDK扩展程序或Bootstrap / Restartless附加组件(Embedded WebExtensions)中使用WebExtension。如果您在基于Add-on SDK的附加组件中执行此操作,则可能会使用所有文件来描述Firefox附加组件。在打包附加SDK扩展之前, package.json (附加SDK)和 manifest.json (WebExtension)。打包后(例如jpm xpi),它将有一个 install.rdf ,并且可能有 chrome.manifest (两者都用于所有其他类型的Firefox添加 - ONS)。