在使用它之前检测 window.close() 是不是可以工作(JavaScript)
Posted
技术标签:
【中文标题】在使用它之前检测 window.close() 是不是可以工作(JavaScript)【英文标题】:Detect if window.close() will work before using it (JavaScript)在使用它之前检测 window.close() 是否可以工作(JavaScript) 【发布时间】:2018-11-08 13:48:03 【问题描述】:根据许多规则和安全功能,window.close()
仅在特定情况下有效:
From the latest working spec 为window.close()
:
Window 对象的
对应的浏览上下文A是script-closable。 现任脚本的浏览上下文熟悉浏览上下文A。 允许当前脚本的浏览上下文导航浏览上下文A。close()
方法应在满足以下所有条件时关闭浏览上下文A:如果浏览上下文是由脚本(而不是由用户的操作创建)的辅助浏览上下文,则该浏览上下文是可脚本关闭,或者如果它是一个浏览上下文,其会话历史记录只包含一个文档。
我有一个允许用户关闭新窗口的 Web 应用程序,它可以正常工作,除非不遵守上述规则。
我正在寻找的是检测 close() 函数何时起作用并且仅在这种情况下显示关闭按钮。
我发现有关window.opener
的信息从打开它的窗口返回一个引用。但它不起作用。
if(window.opener != null)
//show button
这可能是因为新窗口是使用“右键单击 -> 在新选项卡中打开”而不是脚本打开的。当标签以这种方式打开时window.close()
有效,我只想检测window.close()
何时有效。
有什么想法吗?
【问题讨论】:
【参考方案1】:根据文档,如果给定上下文的会话历史记录长度为 1(这正是您在新选项卡/窗口中打开链接时发生的情况),则该窗口也是可脚本关闭的。您需要将其添加到您的检查器中。
if(window.opener != null || window.history.length == 1)
//show button
【讨论】:
【参考方案2】:据我了解,没有本地方法可以做到这一点。通过检查window.closed
是否为假来检测错误,可以检查 window.close() 是否在事后失败。 See here.
您唯一的选择是提供关闭每个窗口的功能,或者在所有情况下都尝试关闭它,并在失败时要求用户手动关闭它 - 否则您或您的任何代码都无法关闭它定义。不幸的是,没有办法解决这个问题。如果无法以编程方式关闭窗口,则可能值得尝试的一个选项是将它们重定向到某个地方,您可以在每次尝试后轻松验证。
【讨论】:
以上是关于在使用它之前检测 window.close() 是不是可以工作(JavaScript)的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript中window.open()打开与window.close()关闭
请问JavaScript语言中的window.close()和window.parent.close()有啥区别?
ExtJS Window.close()之后,关闭所在页面并跳转到另一个url