2019年-执行php脚本后关闭标签页(Chrome)

时间:2019-01-23 03:58:13

标签: javascript php

我发现了很多与此相关的问题,但是大多数问题来自2012年或更早,而且Google似乎有新的安全政策,因此问题在2019年出现。

我的Chrome扩展程序正在打开一个新标签,并导航到一个包含两个PHP变量的网站。打开网站后,我的PHP脚本发挥了魔力,一旦完成,我想关闭选项卡。

现在是问题所在:

  1. Chrome开发工具包抛出错误,提示“脚本只能关闭它打开的窗口”
  2. 我的扩展程序在JS上运行,我认为它无法关闭标签页(或者至少我不知道如何)
  3. 由于更新的安全策略,所有PHP端echo '<script>setTimeout(function(){ window.close();}, 5000);</script>';解决方案均无法正常工作

现在,如何处理呢?

谢谢, A2k

2 个答案:

答案 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