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

为什么 `window.close()` 和 `self.close()` 无法关闭 Chrome Windows?

Linda Hamilton
Linda Hamilton原创
2024-12-18 03:43:10968浏览

Why Do `window.close()` and `self.close()` Fail to Close Chrome Windows?

Window.close 和 Self.close 无法关闭 Chrome Windows:综合分析

调用 window.close() 或 self.close JavaScript 代码中的 () 可能无法关闭 Chrome 中的窗口。这种差异源于一种常见的误解,即 Chrome 禁止脚本关闭窗口,除非它们是由脚本创建的。虽然这是错误的,但这些方法可能仍然无法按预期运行。本文深入探讨了根本原因并探讨了潜在的解决方案。

安全限制

现代浏览器已实施安全措施来防止恶意脚本随意关闭窗口。根据 window.close() 规范,JavaScript 通常不允许关闭不是由同一脚本创建的窗口。此限制旨在遏制安全漏洞和用户不便。

Firefox 实施

Firefox 严格遵守这些安全准则,明确禁止脚本关闭未由脚本。如果 Greasemonkey/Tampermonkey 脚本尝试在 Firefox 中使用 window.close(),则会触发错误消息:“脚本可能无法关闭未由脚本打开的窗口。”

Chrome 实现

Chrome 则相反,允许脚本关闭非脚本创建的窗口。但是,此异常不会扩展到 Greasemonkey 或 Tampermonkey 等用户脚本上下文。尝试从这些上下文中使用 window.close() 将导致静默失败。

解决方法

虽然 Chrome 扩展程序和 Firefox 插件提供了可靠的关闭解决方案windows,有一些针对用户的 hacky 解决方法脚本:

Chrome:

  • 自重定向漏洞:此漏洞一般不再有效。但是,它仍然可以在没有浏览历史记录的新打开选项卡中使用注入代码。
  • @grant Window.Close 方法: 在 Tampermonkey 脚本中使用 @grant 指令,可以启用 window.close() 功能。但是,这仅适用于其他选项卡,不适用于最后一个剩余选项卡。

Firefox:

  • 禁用安全设置: 将 about:config 设置 allowed_scripts_to_close_windows 更改为 true。出于安全考虑,不建议这样做。

长期解决方案

最可靠的方法是创建专用的 Chrome 扩展程序或 Firefox 插件可以有效地调用 window.close() 。或者,用户脚本开发人员可以考虑向 Greasemonkey 或 Tampermonkey 提交功能请求以获得内置窗口关闭功能。

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

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