如何确定网页中JavaScript安装脚本的firefox扩展版本?
我希望能够询问用户在登录到我的web应用程序时是否要安装我的firefox扩展,以防他们尚未安装,或者他们的版本不是最新版本。有可能这样做吗 我无法通过搜索网络来收集关于这件事的有用信息。我当前的尝试如下所示:如何确定网页中JavaScript安装脚本的firefox扩展版本?,javascript,firefox,firefox-addon,Javascript,Firefox,Firefox Addon,我希望能够询问用户在登录到我的web应用程序时是否要安装我的firefox扩展,以防他们尚未安装,或者他们的版本不是最新版本。有可能这样做吗 我无法通过搜索网络来收集关于这件事的有用信息。我当前的尝试如下所示: $(function() { if ("InstallTrigger" in window) { var params = { "Example": { URL: "https://www.example.
$(function() {
if ("InstallTrigger" in window) {
var params = {
"Example": {
URL: "https://www.example.com/plugins/firefox/latest/example.xpi",
IconURL: "https://www.example.com/favicon.ico",
Hash: "sha1:37441290FFDD33AB0280BECD79E1EF",
toString: function () { return this.URL; }
}
};
alert(InstallTrigger.compareVersion("Example", "0.8"));
InstallTrigger.install(params);
}
});
使用InstallTrigger.install()进行的安装工作正常。但是调用InstallTrigger.compareVersion()会导致Firefox38中出现错误“TypeError:InstallTrigger.compareVersion不是函数”。InstallTrigger.getVersion()也是如此
此处记录了compareVersion()。但我也发现有讨论认为compareVersion()与firefox扩展无关,所以我感到困惑
当安装的扩展版本不是当前版本时,怎么可能只调用InstallTrigger.install() 我现在找到了一个合适的解决方案。InstallTrigger.compareVersion()和InstallTrigger.getVersion()似乎不再是InstallTrigger API的一部分,而且似乎没有其他方法可以直接检索网页中已安装firefox插件的信息 诀窍在于,扩展可以通过操纵DOM将其插入到页面中来提供这些信息。下面是一个使用FirefoxSDK的示例,它在主体中添加了一个CSS类
var pageMod = require("sdk/page-mod");
var contentScriptValue =
'document.body.className += " ExampleComFirefoxExtensionInstalledClass";';
pageMod.PageMod({
include: "*www.example.com*",
contentScript: contentScriptValue
});
然后,页面可以检查插入的信息
$(function() {
window.setTimeout(function() {
if ("InstallTrigger" in window &&
!$('body').hasClass('ExampleComFirefoxExtensionInstalledClass'))) {
var params = {
"Example": {
URL: "https://www.example.com/plugins/firefox/latest/example.xpi",
IconURL: "https://www.example.com/favicon.ico",
Hash: "sha1:37441290FFDD33AB0280BECD79E1EF",
toString: function () { return this.URL; }
}
};
InstallTrigger.install(params);
}
}, 500);
});
需要超时,因为插件在页面完全加载后操作DOM
因此,插件还可以将其版本号插入网页,以便能够直接安装较新的版本。从网页触发CustomEvent并从插件响应