首页 >web前端 >js教程 >为什么 `window.close()` 和 `self.close()` 无法关闭我的 Chrome 窗口?

为什么 `window.close()` 和 `self.close()` 无法关闭我的 Chrome 窗口?

Barbara Streisand
Barbara Streisand原创
2024-12-14 19:01:14158浏览

Why Won't `window.close()` and `self.close()` Close My Chrome Window?

《Chrome 中 window.close 和 self.close 不关闭窗口:全面解释与解决方案》

与普遍看法相反,JavaScript 确实能够关闭由脚本创建的窗口,即使在 Chrome 中也是如此。引入此安全措施是为了防止恶意活动,限制 JavaScript 关闭不是由同一脚本创建的窗口。

问题的根源

根据 window.close() 规范,如果满足以下条件,浏览器可能会选择关闭窗口:

  1. 浏览上下文必须是“脚本可关闭”,这意味着它是由脚本或在其会话历史记录中只有一个文档。
  2. 现有脚本的浏览上下文必须与目标浏览上下文熟悉。
  3. 必须允许现有脚本的浏览上下文导航目标浏览上下文。

Firefox 限制

Firefox 严格执行 JavaScript 只能执行的条件关闭由同一脚本打开的窗口。任何尝试关闭不符合此条件的窗口都会导致错误消息:“脚本可能无法关闭不是由脚本打开的窗口。”

Chrome 的例外

Chrome 允许此规则的例外,允许 JavaScript 关闭窗口,即使它们不是由同一脚本创建的。不过,此例外不适用于用户脚本。

解决方法

Chrome

  1. 自重定向漏洞(已弃用): 将当前页面替换为自身,然后关闭窗口: open(location, '_self').close();。此漏洞现已基本被阻止。
  2. TamperMonkey 覆盖(功能有限): 使用显式 // @grant 指令并调用 window.close() 可以关闭 Chrome 版本 43 和 中的其他选项卡

Firefox

  1. 安全设置调整(不推荐):通过将allow_scripts_to_close_windows设置为true来禁用安全保护在关于:配置。请注意,这会带来安全风险。

长期解决方案

为了可靠地关闭窗口,请考虑开发 Chrome 扩展程序或 Firefox 插件。这些扩展可以关闭当前窗口,不受 JavaScript 的限制。

以上是为什么 `window.close()` 和 `self.close()` 无法关闭我的 Chrome 窗口?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn