根据许多规则和安全功能,window.close()
仅适用于特定情况:
window.close()
的
如果满足以下所有条件,则Window对象上的
close()
方法应关闭浏览上下文 A :
- 相应的浏览上下文 A 脚本可关闭。
- 现有脚本的浏览上下文熟悉浏览上下文 A 。
- 允许现有脚本的浏览上下文导航浏览上下文 A 。
浏览上下文是脚本可关闭的,如果它是是由脚本创建的辅助浏览上下文(而不是用户的操作),或者如果它是一个浏览上下文,其会话历史记录只包含一个文档。
我有一个Web应用程序,允许用户关闭新窗口并且工作正常,除非不遵守上述规则。
我正在寻找的是检测close()函数何时起作用,并且只显示关闭按钮。
我发现有关window.opener
的信息会从打开它的窗口返回一个引用。但它不起作用。
if(window.opener != null){
//show button
}
也许这是因为新窗口是使用“右键单击 - >在新标签页中打开”而不是脚本打开的。以这种方式打开标签window.close()
时,我只想检测window.close()
何时起作用。
有什么想法吗?
答案 0 :(得分:2)
根据文档,如果给定上下文的会话历史记录长度为1(这正是您在新选项卡/窗口中打开链接时发生的情况),则窗口也可以关闭脚本。您需要将其添加到您的检查器。
if(window.opener != null || window.history.length == 1){
//show button
}
答案 1 :(得分:0)
据我所知,没有一种本地方式可以做到这一点。通过检查window.closed
是否为false来检查错误,可以检查window.close()是否在事后失败。 See here.
您唯一的选择是提供关闭每个窗口的功能,或在所有情况下尝试,并要求用户在失败时手动关闭它 - 否则您或任何代码无法关闭它定义。不幸的是,没有办法解决这个问题。如果窗口无法以编程方式关闭,那么可能值得尝试的一个选项是将它们重定向到某个位置,您可以在每次尝试后轻松验证。