我有一个从 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 级别的处理,例如如果扩展不存在则显示安装按钮,如果更新可用则显示更新按钮等
到目前为止,一切都在工作。但是有一些机械的事情正在做。
我尝试使用 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" } } }
]
}
}
}
jpm xpi
),它会有一个 install.rdf 并且可能有一个 chrome.manifest (两者都用于所有其他类型的 Firefox 附加组件)。 关于firefox-addon - Firefox 网络扩展 自动更新未列出和自托管的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40541561/