You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么部分网站无法通过父窗口调用window.close方法关闭?

父窗口调用window.close()关闭跨源子窗口失效问题说明

实测表现

  • 部分站点支持父窗口正常关闭,以Google站点为例,代码如下:
const winHandle = window.open('https://www.google.com', '_blank');
setTimeout(() => {
  winHandle.close();  // 可正常关闭
}, 2000);
  • 部分站点无法通过父窗口关闭,以Facebook站点为例,代码如下:
const winHandle = window.open('https://www.facebook.com', '_blank');
setTimeout(() => {
  winHandle.close();  // 关闭失效
}, 2000);

失效原因

  • 核心触发原因是浏览器安全策略限制:如果子窗口所属站点配置了Cross-Origin-Opener-Policy(COOP)响应头,取值为same-origin或same-origin-allow-popups时,会主动切断跨源父窗口和当前子窗口的opener关联,父窗口持有的窗口句柄会失去操作权限,此时调用close()方法无任何效果。
  • 少数站点会在自身前端逻辑中拦截非页面自身触发的关闭事件,也会导致父窗口的关闭调用失效。
  • 同域场景下不会触发该限制,只要父窗口持有有效子窗口句柄,close()方法均可正常生效。

内容的提问来源于stack exchange,提问作者Qi Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:45:00