我希望能够询问用户登录我的Web应用程序时是否要安装我的firefox扩展程序,以防他们尚未安装,或者其版本不是最新版本。有可能这样做吗?
我无法通过搜索网络收集有关此事的有用信息。我当前的尝试如下所示:
$(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()的安装有效。但是在Firefox 38中,对InstallTrigger.compareVersion()的调用导致错误“ TypeError:InstallTrigger.compareVersion不是函数”。对于InstallTrigger.getVersion()也是如此。
compareVersion()在此处记录:http://www.applied-imagination.com/aidocs/xul/xultu/elemref/ref_InstallTrigger.html。但是我也发现有关compareVersion()与firefox扩展无关的讨论,所以我很困惑。
如果安装的扩展版本不是当前版本,怎么可能只调用InstallTrigger.install()?
最佳答案
我现在找到了合适的解决方案。 InstallTrigger.compareVersion()和InstallTrigger.getVersion()似乎不再是InstallTrigger API的一部分,而且似乎也没有其他方法可以直接检索有关网页内已安装的Firefox插件的信息。
诀窍是,扩展程序可以通过操作DOM将其插入页面中,从而自身提供此信息。这是使用firefox SDK的示例,该示例向主体添加了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。
因此,该插件还可以将其版本号插入网页中,以便能够直接安装较新的版本。