使用 JavaScript 后台脚本关闭 window? (火狐扩展)

Close window with JavaScript background script? (Firefox Extension)

我目前正在编写一个 Firefox 扩展,它会在我的后台脚本中打开一个新的 window。当用户单击页面上的按钮时,后台脚本将执行并打开 window.

到目前为止我有:

// content script
downloadMod(linkToOpen); //button clicked
function downloadMod(url) {
    // var test = window.open(url, '_blank');
    var myPort = browser.runtime.connect({ name: "cac410c4672fff93bf0d3186636d8876de3dfeb6@temporary-addon"});
    myPort.postMessage({ greeting: url });
}

在我的后台脚本中(上面代码连接的脚本)我有:

//background script
portFromCS.onMessage.addListener(function (m) {
        var test = browser.windows.create({
            url: m.greeting,
            allowScriptsToClose: true,
        });

注意: 所有代码都按预期工作。然而,当关闭 window 时,麻烦就来了。

我尝试了 self.close()window.close() 的变体。我什至创建了一个函数等待5秒加载新创建的window然后关闭页面无济于事。我所有的尝试都返回错误:

脚本可能无法关闭未被脚本打开的 windows。

我认为这个错误应该用 allowScriptsToClose 标志来消除?

要关闭您使用 browser.windows.create 创建的 window,您需要使用 browser.windows.remove。

所以:

let windowId;

browser.windows.create({url: "http://google.be"}).then((data) => {
    windowId = data.id;
});

// Sometime later, use windowId to close the window
setTimeout(function(){
    browser.windows.remove(windowId);
}, 5000);