`window.close()`和`self.close()`不关闭Chrome的窗口

阅读时长 2 分钟读完

在前端开发中,我们通常需要在浏览器中打开新的窗口并处理一些逻辑。而在某些情况下,我们可能需要通过代码将所打开的窗口关闭。在这种情况下,许多开发人员会尝试使用window.close()self.close()方法来关闭窗口。但是,在Google Chrome浏览器中,这两种方法似乎并不总是有效。本文将探讨为什么这两个方法可能无法正常工作,并提供解决方案。

问题的根源

Chrome的一个安全特性是,它只允许通过脚本打开的窗口或标签页可以通过脚本关闭。如果一个窗口或标签页是用户手动打开的,那么任何脚本都无法关闭它。

当您尝试使用window.close()self.close()方法关闭由用户手动打开的窗口时,浏览器会显示一个警告框询问用户是否确认关闭该窗口。这是因为在Chrome中,这两个方法只能关闭以编程方式打开的窗口或标签页。

如何解决这个问题

要解决这个问题,您需要确保要关闭的窗口或标签页是由JavaScript打开的。这意味着您需要记录打开每个窗口或标签页的窗口对象,并在需要关闭它们时使用该对象的close()方法。

以下是一个示例,演示如何打开一个新窗口并在稍后通过代码将其关闭:

在本示例中,我们首先使用window.open()方法打开一个新的窗口,并将该窗口的窗口对象保存到名为newWindow的变量中。然后,我们使用setTimeout()函数设置一个5秒的定时器,在定时器的回调函数内调用newWindow.close()方法来关闭该窗口。

结论

虽然window.close()self.close()方法在许多浏览器中都可以正常工作,但在Chrome浏览器中,它们只能关闭由JavaScript打开的窗口或标签页。如果您尝试关闭由用户手动打开的窗口或标签页,则会显示警告框并阻止关闭操作。要解决这个问题,请始终记录要关闭的窗口或标签页的窗口对象,并在需要时使用该对象的close()方法来关闭它们。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/10284

纠错
反馈