window.close() 不起作用 - 脚本可能只关闭由它打开的窗口

IT技术 javascript window keyboard-shortcuts shortcut
2021-03-13 12:32:08

当我尝试通过window.close()Javascript方法关闭窗口时,我总是遇到问题,而浏览器在控制台上显示以下消息:

"Scripts may close only the windows that were opened by it."

这发生在页面的每个部分。我可以直接通过链接、按钮或脚本运行它,但始终会显示此消息。

我试图替换window.close();下面的函数(或这些函数的变体)的方法,但没有再发生任何事情:

window.open('', '_self', '');
window.close();
6个回答

错误消息没有比这更清楚:

"Scripts may close only the windows that were opened by it."

如果您的脚本没有启动打开窗口(使用 window.open 之类的东西),则不允许该窗口中的脚本关闭它。它是一种防止网站控制您的浏览器和关闭窗口的安全措施。

然而,它还可以防止窗户自行关闭,这似乎不是一个非常有用的安全措施,而且我相对确定 99% 的人都发现了这一点。
2021-05-15 12:32:08
@donatJ - 它很有用,因为它可以阻止网站破坏您正在使用的窗口以及它的后退按钮,该按钮可以指向其他网站。
2021-05-19 12:32:08

我通过 Google 和 Stack Overflow 上搜索了许多网页,但没有任何建议可以解决我的问题。

经过多次尝试,我改变了测试该控制器的方式。然后我发现问题总是在我通过Ctrl + Shift + TChrome中的快捷方式重新打开页面时发生所以页面运行了,但没有父窗口引用,因为它无法关闭。

您无法关闭当前窗口或使用“_self”打开的任何窗口或页面,但您可以这样做

var customWindow = window.open('', '_blank', '');
    customWindow.close();

windows 对象有一个 windows 字段,在该字段中它被克隆并存储打开窗口的日期,应在此字段上调用 ​​close:

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

凌乱,但它对我有用。

window.close();
setTimeout(() => {window.close();}, 2000);
setTimeout(() => {window.close();}, 4000);

这不是解决方案。这实际上是两次尝试相同的事情并希望获得更好的结果。
2021-05-09 12:32:08