我无法完全找到答案。
上下文
这个 chrome 扩展在点击快捷方式后向用户显示相关信息。在我的清单中:
...
"browser_action": {
"default_popup": "popup.html",
"default_icon": {
"16": "images/nightscout16.png",
"32": "images/nightscout32.png",
"48": "images/nightscout48.png",
"128": "images/nightscout128.png"
}
},
"commands": {
"_execute_browser_action" : {
"suggested_key": {
"default": "Alt+Shift+S",
"linux": "Alt+Shift+S",
"windows": "Alt+Shift+S",
"mac": "Alt+Shift+S"
}
}
},
"manifest_version": 2
...
然后,在我的 popup.js 上,我有一个关闭窗口的计时器:
var timerPop = setTimeout(function () {
window.close();
}, 5000);
...
效果很好!用户点击快捷方式,窗口出现,然后关闭。
在同一个弹出窗口中,有一个设置图标,一旦点击,用户就会看到一个新窗口,用户应该在其中输入一个 url。这是由 settings.js/.html/.css 控制的。在 popup.js 中,我使用以下方法在窗口之间切换:
document.getElementById("gearButton").addEventListener('click', onclick, false)
function onclick () {
document.getElementById("gearButton").blur();
clearTimeout(timerPop);
window.location.href = "settings/settings.html";
}
计时器“timerPop”被清除,因此它不会关闭(按预期)。一旦用户与设置窗口交互,他们就可以使用“后退按钮”返回(与上面的代码相同,但具有正确的元素名称等)。这也很好用。
window.location.href = "/../popup.html";
问题:
当我使用完设置窗口并点击后退按钮返回到 popup.html。定时器再次初始化,但是当它到达window.close()时,它无法关闭弹出窗口并抛出一个:
<块引用>脚本只能关闭由它们打开的窗口。
虽然计时器(和 window.close())在我只打开弹出窗口时工作,但如果用户访问设置页面并返回弹出窗口,我希望计时器也关闭弹出窗口。
我也试过 self.close() 并得到相同的结果
请帮忙!