正如许多资源所述,例如此 SO post:javascript close current window以及Mozilla 自己的文档,应该不可能关闭javascript未window.open()打开的窗口/新选项卡。
然而,我刚刚经历过,当通过锚标记打开新选项卡并在底部所有提到的浏览器中使用该属性时,这种方法可以完美地工作- 但是,当包含target="_blank"该属性时,它在 Mozilla Firefox 中不起作用(rel="noopener"没有它确实可以工作,但根据 Mozilla 的文档,出于安全原因不要将其遗漏)。
怎么会出现这样的情况呢?是否target="_blank"简单地认为是一个脚本?
您可以在下面找到 2 个示例代码,您可以将它们复制/粘贴到 HTML 文件中并在您自己的计算机上试用。
第一个文件:打开新选项卡:
<html>
<body>
<a href="C:\Users\..{insert your own file path here to the sample code below}" target="_blank" rel="noopener noreferrer">Open new tab</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
第二个文件:使用上面代码片段打开的 HTML - 包含一个用于关闭同一选项卡的按钮:
<html>
<body>
<button onclick="window.close();">Close me!</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这也已经在实时网站上进行了测试,并且已经测试可以在以下浏览器上运行:
rel="noopener"如上所述,它在包含时在 Mozilla Firefox 中不起作用。
\n\n怎么会出现这样的情况呢?target="_blank" 是否只是被视为脚本?
\n
MDN 已经链接到相关规范。
\nhttps://html.spec.whatwg.org/multipage/window-object.html#dom-window-close表示窗口可以关闭,如果是的话script-closable,并链接到以下定义,
\n\n如果浏览上下文是由脚本创建的辅助浏览上下文(而不是由用户的操作),或者如果它是会话历史记录仅包含一个文档的顶级浏览上下文,则该浏览上下文是可脚本关闭的。
\n
(https://html.spec.whatwg.org/multipage/window-object.html#script-closable)
\ntarget="_blank"创建一个顶级浏览上下文,只要您不\xe2\x80\x99导航到弹出窗口内的任何位置,它也有一个单文档历史记录\xe2\x80\xa6,因此允许通过脚本关闭它。