在使用window.close()之前检测它是否工作(JavaScript)

在使用window.close()之前检测它是否工作(JavaScript),javascript,window,Javascript,Window,根据许多规则和安全功能,window.close()仅在特定情况下有效: 对于窗口。关闭(): 如果满足以下所有条件,则窗口对象上的close()方法应关闭浏览上下文A: 相应的浏览上下文是脚本可关闭的 现任脚本的浏览上下文熟悉浏览上下文A 允许现任脚本的浏览上下文导航浏览上下文A 如果浏览上下文是由脚本创建的辅助浏览上下文(而不是由用户的操作创建的),或者如果它是会话历史记录仅包含一个文档的浏览上下文,则可以使用脚本关闭浏览上下文 我有一个允许用户关闭新窗口的web应用程序,它工作正常,除

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

对于
窗口。关闭()

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

  • 相应的浏览上下文是脚本可关闭的
  • 现任脚本的浏览上下文熟悉浏览上下文A
  • 允许现任脚本的浏览上下文导航浏览上下文A
如果浏览上下文是由脚本创建的辅助浏览上下文(而不是由用户的操作创建的),或者如果它是会话历史记录仅包含一个文档的浏览上下文,则可以使用脚本关闭浏览上下文

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

我想要的是检测close()函数何时工作,并且在这种情况下只显示close按钮

我找到了有关
window.opener
的信息,它从打开它的窗口返回一个引用。但它不起作用

if(window.opener != null){
//show button
}
这可能是因为新窗口是使用“右键单击->在新选项卡中打开”而不是脚本打开的。当选项卡以这种方式打开时,
window.close()
起作用,我只想检测
window.close()
何时起作用


有什么想法吗?

据我所知,没有一种本土的方法可以做到这一点。通过检查
window.close
是否为false来检测错误,可以检查window.close()是否在事件发生后失败


您唯一的选择是提供关闭每个窗口的功能,或者在所有情况下尝试关闭,如果失败,请用户手动关闭它-否则,根据定义,您或您的任何代码都无法关闭它。不幸的是,没有办法解决这个问题。一个可能值得尝试的选项是,如果窗口无法以编程方式关闭,则将其重定向到某个位置,每次尝试后都可以轻松地进行验证。

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

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