如何确定网页中JavaScript安装脚本的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.

我希望能够询问用户在登录到我的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()进行的安装工作正常。但是调用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并从插件响应