问题是,当我调用window.close()或self.close()时,它不会关闭窗口。现在似乎有一个信念,在Chrome中,你不能通过脚本关闭任何不是脚本创建的窗口。这显然是错误的,但无论如何,它仍然应该这样做,即使它需要弹出一个警告来确认。这些都没有发生。

所以有没有人有真正的,功能性的和经过验证的方法关闭一个窗口,使用javascript:window.close()或javascript:self.close(),这实际上是什么是预期的,发生的事情只是在每个浏览器,不是基于Chrome ?任何建议都将非常感谢,我正在寻找Javascript特定的解决方案,没有JQuery或第三方实现。

更新:虽然大部分建议都有严重的局限性和可用性问题,但最新的建议(具体到TamperMonkey)使用// @grant窗口。在脚本头文件中使用Close,即使是在那些通常不能处理Close方法的选项卡上也可以。虽然不完全理想,也不适用于所有情况,但在我的情况下,这是一个很好的解决方案。


当前回答

对于使用锚标记打开子窗口的用户,本文描述了解决此问题的方法。

我的理解是,在Chrome的新版本,rel属性被设置为noopener默认锚标记与目标_blank。通过将它设置为opener,你可以恢复旧的行为。

请注意,引入这一点是为了避免tab-napping攻击。

其他回答

试试这样做onclick="return self.close()"

如果你不能关闭脚本没有打开的窗口,那么你可以使用下面的代码销毁你的页面:

 document.getElementsByTagName ('html') [0] .remove ();

这可能有点老了,但还是回答吧。

我使用top.close()关闭一个制表符。Window.close()或其他open…亲密对我没用。

下面的代码对我有用

window.open('location', '_self', '');
window.close();

在Chrome 43.0.2357.81上测试

您也可以尝试使用下面的代码。这也将帮助你重定向你的父窗口:

家长:

<script language="javascript">

function open_a_window() 
{
    var w = 200;
        var h = 200;
        var left = Number((screen.width/2)-(w/2));
        var tops = Number((screen.height/2)-(h/2));

        window.open("window_to_close.html", '', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+tops+', left='+left);

   return false;
}

// opener:
window.onmessage = function (e) {
  if (e.data === 'location') {
    window.location.replace('https://www.google.com');
  }
};

</script>

<input type="button" onclick="return open_a_window();" value="Open New Window/Tab" />

弹出:

<!DOCTYPE html>
<html>
<body onload="quitBox('quit');">

<h1>The window closer:</h1>

<input type="button" onclick="return quitBox('quit');" value="Close This Window/Tab" /> 


<script language="javascript">

function quitBox(cmd) 
{      
    if (cmd=='quit')    
    {   
       window.opener.postMessage('location', '*');
       window.open(location, '_self').close();    
    }     
    return false;   
}

</script>

</body>
</html>