我发现了很多与此相关的问题,但是大多数问题来自2012年或更早,而且Google似乎有新的安全政策,因此问题在2019年出现。
我的Chrome扩展程序正在打开一个新标签,并导航到一个包含两个PHP变量的网站。打开网站后,我的PHP脚本发挥了魔力,一旦完成,我想关闭选项卡。
现在是问题所在:
echo '<script>setTimeout(function(){ window.close();}, 5000);</script>';
解决方案均无法正常工作现在,如何处理呢?
谢谢, A2k
答案 0 :(得分:1)
window.close()仅在使用window.open()方法由脚本打开要关闭的窗口时有效。
如果您只是想关闭标签页,那么可能会适合您的解决方法是
echo '<script>
setTimeout(function(){
myWin = window.open("","_self")
myWin.close();
}, 5000);</script>'
希望有帮助
答案 1 :(得分:1)
如果您在子窗口中使用window.opener...
或遇到跨域问题,则可以指示父窗口关闭子窗口,由子窗口 postMessage(...)
解决方案。
经典的“ window.opener参考”解决方案:
parent.html
<script>
var childWindow = window.open("child.html","_blank");
</script>
child.html
<script>
setTimeout(function(){
window.opener.childWindow.close();
},1000);
</script>
替代“发布消息”解决方案:
(如果您遇到CORS跨域资源共享问题,请使用它。)
parent.html
<script>
window.open("child.html","_blank");
window.addEventListener('message',function(e){
if(e.data === 'CloseChildWindow')
e.source.close();
}, false);
</script>
child.html
<script>
setTimeout(function(){
window.opener.postMessage('CloseChildWindow','*');
},1000);
</script>
请注意,setTimeout();存在只是为了证明此行为,否则窗口将立即关闭。还要在postMessage()函数上设置appropriate domain parameter。