使用window.open打开跨域弹窗且弹窗设COOP:same-origin-allow-popups,opener能否访问?
问题解答:跨源opener能否访问设置了
Cross-Origin-Opener-Policy: same-origin-allow-popups的弹窗? 结论
不能访问。
详细解释
Cross-Origin-Opener-Policy(COOP)的核心作用是管控浏览器窗口之间的opener引用关系,不同的COOP值对应不同的隔离规则:
same-origin-allow-popups的核心生效逻辑是:当设置该值的页面作为「打开方(opener)」时,它可以保留对自己打开的、未设置COOP或COOP为unsafe-none的跨源窗口的引用;- 但如果是被打开的弹窗页面设置了
same-origin-allow-popups,规则指向会反转:弹窗会只接受来自同源页面的opener引用,任何跨源的opener都会被强制切断引用关系。
回到你的场景:恶意站点(跨源opener)调用window.open打开设置了same-origin-allow-popups的弹窗时,弹窗的COOP策略会直接隔离跨源的opener。此时opener通过window.open返回的窗口对象,无法访问弹窗的任何属性或方法(大部分属性会返回null或触发跨源错误)。
补充说明
MDN中关于same-origin-allow-popups的描述,确实是针对「打开方页面设置该COOP」的场景。而被打开页面的COOP设置,决定的是它是否允许外部opener保持引用——same-origin-allow-popups对被打开页面来说,等同于只信任同源的打开方,跨源打开方完全无法建立有效引用。
内容的提问来源于stack exchange,提问作者Michal Charemza
相关产品推荐
相关产品推荐

