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

为何Cross-Origin-Opener-Policy会阻止同域target="_blank"链接打开?

关于Cross-Origin-Opener-Policy与同域target="_blank"链接拦截的问题解答

同域访问为何被拦截?

当设置Cross-Origin-Opener-Policy: same-origin时,浏览器会强制当前页面所在的浏览上下文组仅容纳同源且遵循相同COOP策略的页面。即使用target="_blank"打开的是同域链接,新标签页的页面默认会采用unsafe-none的COOP策略,导致它的上下文组和原页面的上下文组不兼容,浏览器会判定这违反了COOP的隔离规则,因此拦截跳转。

至于same-origin-allow-popups无效的情况:这个策略只是允许原页面弹出不受限制的窗口,但并没有解决新窗口和原页面的上下文兼容问题——弹出的窗口如果没设置匹配的COOP头,依然会因为上下文组不匹配被拦截。

新标签页为何影响结果?

target="_blank"会触发浏览器创建全新的浏览上下文,而COOP的核心逻辑就是隔离不同的浏览上下文组。如果在当前标签页打开链接(无target="_blank"),页面是在同一个上下文组内刷新加载,自然符合same-origin的同源要求;但新标签页属于独立的上下文,必须验证两者的COOP策略是否匹配才能允许关联,不匹配就会被拦截。

如何解决该问题?

有几种可行方案,按需选择:

  • 给所有同域目标页面添加相同的Cross-Origin-Opener-Policy头(比如same-origin或same-origin-allow-popups),让新标签页的页面和原页面属于同一个上下文组,即可正常跳转。
  • 给带target="_blank"的<a>标签添加rel="noopener noreferrer"属性。这样浏览器会让新标签页完全独立打开,不尝试和原页面建立上下文关联,COOP策略就不会干扰跳转。注意添加后,原页面和新标签页无法通过window.opener互相访问。
  • 降低COOP策略为unsafe-none,但这会完全失去抵御侧信道攻击的防护能力,仅在不需要安全保障的场景下考虑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:34:54