【问题标题】:Close window with JavaScript background script? (Firefox Extension)关闭带有 JavaScript 背景脚本的窗口? (火狐扩展)
【发布时间】:2018-07-22 06:33:12
【问题描述】:

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

到目前为止,我有:

// 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,
        });

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

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

脚本不能关闭不是由脚本打开的窗口。

我认为应该使用 allowScriptsToClose 标志删除此错误?

【问题讨论】:

  • 只有用window.open()打开的窗口才能通过JS关闭。
  • @marekful 这很奇怪。所以我只是尝试了 window.open(url) 的方式,不幸的是我的浏览器中没有打开任何窗口。
  • 现代浏览器默认会阻止弹出窗口。

标签: javascript html firefox firefox-addon firefox-addon-webextensions


【解决方案1】:

要关闭您使用 browser.windows.create 创建的窗口,您需要使用 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);

【讨论】:

  • 我明白了,有没有办法找到新打开的窗口的tabId?
  • 我认为你的意思是 windowId。我添加了一个例子。如果您想要标签 ID,我建议您查看 browser.tabs.query,它接受一个 windowId 并将其转换为标签对象列表,包括它们的 ID。
猜你喜欢
  • 2023-03-07
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多