Firefox 不调用扩展安装回调

Extension install callback not called for Firefox

我实际上是在网站上添加一个按钮来安装网络扩展,我希望有一个回调告诉我它是否成功。

我偶然发现 documentation 展示了这段代码:

function xpinstallCallback(url, status)
{
if (status == 0)
   msg = "XPInstall Test:   PASSED\n";
else
   msg = "XPInstall Test:   FAILED\n";
   dump(msg);
   alert(msg);
}
xpi={'XPInstall Pre-Checkin Test':'pre_checkin.xpi'};
InstallTrigger.install(xpi,xpinstallCallback);

所以我使用这个模型和我在网​​上收集的一些信息构建了我的代码,这是我的代码:

$("#install-firefox").on('click', '.install-firefox-extension', function() {
    var params = {
        "Extension": { URL: "https://addons.mozilla.org/firefox/downloads/latest/example/example.xpi",
            IconURL: 'https://addons.cdn.mozilla.net/user-media/addon_icons/example/example.png',
            Hash: "sha256:30097adeeadcf2683e9a4aexampleaa82403aafb7faa6db9f44db657a786a4",
            toString: "https://addons.mozilla.org/firefox/downloads/latest/example/example.xpi"
        }
    };
    InstallTrigger.install(params, function(url, status) {
        if (status == 0)
            console.log("Extension successfully installed");
        else 
            console.log("Extension failed");
    });
});

安装成功,我这里的问题是没有进入回调函数。

MDN documentation for InstallTrigger.install() 状态:

In Firefox 3 the callback is no longer invoked unless the website performing the installation is whitelisted.

鉴于措辞,这意味着在 Firefox 版本 >= 3 中永远不会调用回调函数,除非启动安装的网站被列入白名单。您的网站被列入白名单的可能性很小,因此不会调用回调函数。除了请求 Mozilla 将您的网站列入白名单(我认为这 非常 不太可能),您无法仅通过调用 InstallTrigger.install() 来执行回调.

假设您可以控制扩展程序的代码,另一种方法是让扩展程序通知网站它已安装。如何执行此操作取决于您正在安装的扩展类型。据推测,它将是一个 WebExtension。如果是这样,有几种方法:window.postMessage()CustomEvent,或者让扩展执行页面上下文中已经存在的 function/set 变量。