首页 > 解决方案 > 在使用它之前检测 window.close() 是否可以工作(JavaScript)

问题描述

根据许多规则和安全功能,window.close()仅在特定情况下有效:

从最新的工作规范window.close()

close()如果满足以下所有条件,则 Window 对象上的方法应关闭浏览上下文A

  • 相应的浏览上下文Ascript-closeable
  • 现任脚本的浏览上下文熟悉浏览上下文A
  • 现任脚本的浏览上下文被允许导航浏览上下文A

如果浏览上下文是由脚本创建的辅助浏览上下文(与用户的操作相反),或者如果它是会话历史记录仅包含一个文档的浏览上下文,则它是脚本可关闭的。

我有一个允许用户关闭新窗口的 Web 应用程序,它工作正常,除非不遵守上述规则。

我正在寻找的是检测 close() 函数何时起作用,并且仅在这种情况下显示关闭按钮。

我发现有关window.opener从打开它的窗口返回引用的信息。但它不起作用。

if(window.opener != null){
//show button
}

也许这是因为新窗口是使用“右键单击->在新选项卡中打开”而不是脚本打开的。当以这种方式打开标签时window.close(),我只想检测什么时候window.close()可以工作。

有任何想法吗?

标签: javascriptwindow

解决方案


根据文档,如果给定上下文的会话历史记录长度为 1(这正是您在新选项卡/窗口中打开链接时发生的情况),则该窗口也是可脚本关闭的。您需要将其添加到您的检查器中。

if(window.opener != null || window.history.length == 1){
//show button
}

推荐阅读