使用 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);
我目前正在编写一个 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);