代码之家  ›  专栏  ›  技术社区  ›  Eduardo Ponce de Leon

在使用window.close()之前检测它是否有效(javascript)

  •  2
  • Eduardo Ponce de Leon  · 技术社区  · 6 年前

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

    From the latest working spec 对于 window.close()。 :

    这个 close() 如果满足以下所有条件,则应关闭浏览上下文。 :

    • 相应的浏览上下文 脚本可关闭 .
    • 当前脚本的浏览上下文熟悉浏览上下文 .
    • 允许现任脚本的浏览上下文导航浏览上下文

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

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

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

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

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

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

    2 回复  |  直到 6 年前
        1
  •  3
  •   Eduardo Ponce de Leon    6 年前

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

    if(window.opener != null || window.history.length == 1){
    //show button
    }
    
        2
  •  0
  •   Lewis    6 年前

    据我所知,没有一种本土的方法可以做到这一点。通过检查 window.closed 如果检测到错误,则为假。 See here.

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