我有一个从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按钮,如果有更新,则显示更新按钮等等
到目前为止,一切正常。但是有一些机械方面的事情已经完成。
我必须手动修改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);
});
我不确定每上传新扩展程序是否必须更新此网址。我试图避免审查延迟,所以,我不想使用InstallTrigger方式,除非它是自动更新用户扩展的唯一方法'浏览器。
有没有办法在没有用户干预的情况下自动更新扩展程序?我想如果可以自动更新,我可以避免更改xpi的文件名,并将该href设置为' /public/ffext.xpi'。我是对的还是我需要继续更新网址,即使有自动更新机制?
答案 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" } } }
]
}
}
}
jpm xpi
),它将有一个 install.rdf ,并且可能有 chrome.manifest (两者都用于所有其他类型的Firefox添加 - ONS)。