javascript - 在使用它之前检测 window.close() 是否可以工作(JavaScript)
问题描述
根据许多规则和安全功能,window.close()
仅在特定情况下有效:
从最新的工作规范window.close()
:
close()
如果满足以下所有条件,则 Window 对象上的方法应关闭浏览上下文A:
- 相应的浏览上下文A是script-closeable。
- 现任脚本的浏览上下文熟悉浏览上下文A。
- 现任脚本的浏览上下文被允许导航浏览上下文A。
如果浏览上下文是由脚本创建的辅助浏览上下文(与用户的操作相反),或者如果它是会话历史记录仅包含一个文档的浏览上下文,则它是脚本可关闭的。
我有一个允许用户关闭新窗口的 Web 应用程序,它工作正常,除非不遵守上述规则。
我正在寻找的是检测 close() 函数何时起作用,并且仅在这种情况下显示关闭按钮。
我发现有关window.opener
从打开它的窗口返回引用的信息。但它不起作用。
if(window.opener != null){
//show button
}
也许这是因为新窗口是使用“右键单击->在新选项卡中打开”而不是脚本打开的。当以这种方式打开标签时window.close()
,我只想检测什么时候window.close()
可以工作。
有任何想法吗?
解决方案
根据文档,如果给定上下文的会话历史记录长度为 1(这正是您在新选项卡/窗口中打开链接时发生的情况),则该窗口也是可脚本关闭的。您需要将其添加到您的检查器中。
if(window.opener != null || window.history.length == 1){
//show button
}
推荐阅读
- django - Django 改进了更新视图?
- java - 当显式需要默认构造函数和参数化构造函数时
- svg - SVG 文本无法在 Chrome 或 Safari 中呈现
- laravel - 新鲜的 laravel lumen 找不到控制器驻留在控制器的子文件夹下
- c++ - 如何编写正确的“布尔”函数?
- c# - 将组合框项添加到对象列表并写入 txt 文件
- c# - 在 C# 中,是否允许编译器将浮点文字“升级”为双倍?
- java - JSONObject getString 在第一次运行时返回 null
- r - 从融化的数据框中绘制等高线图
- javascript - 使用 Vanilla javascript 设置元素高度等于宽度