我有一个iframe,它包含一个链接,看起来像这样:
<a href="https://www.google.com/travel/flights/s/3nDqYBmu3h4Jfmwm6"
target="_blank" rel="noopener noreferrer">Purchase Flight</a>
在链接点击,我想它打开一个新的选项卡或窗口。但是,Chrome阻止页面加载,并出现以下错误(在响应下的网络选项卡中):
cross-origin-opener-policy: same-origin-allow-popups
-> This document was blocked from loading in an iframe with a sandbox
attribute because this document specified a cross-origin opener policy.
我没有在请求中设置任何特定的头,只是一个href链接。
该链接在Safari中正常打开,但在Chrome中无法正常打开。任何帮助都非常感谢!!
1条答案
按热度按时间tyg4sfes1#
有2个信息可以帮助理解为什么会发生此错误:
sandbox
的属性,它对iframe应用了许多限制unsafe-none
:默认值。允许将文档添加到其打开器的浏览上下文组中,除非打开器本身具有同源或同源允许弹出窗口的COOPsame-origin-allow-popups
:保留对新打开的窗口或选项卡的引用,这些窗口或选项卡要么没有设置COOP,要么通过将COOP设置为unsafe-none来选择退出隔离same-origin
:将浏览上下文专门隔离到同源文档。跨域文档不会加载在同一浏览上下文中。”根本原因
当从iframe打开链接时,会发生两件事:
sandbox
属性被继承并应用于链接→链接现在被视为来自唯一的源。→链接被阻止,原因是在沙盒iframe中,链接被阻止指向其他浏览上下文
解决方案
将
allow-popups-to-escape-sandbox
添加到iframe的sandbox
属性。这样,打开的链接就不会被沙箱化allow-popups-to-escape-sandbox
:允许沙盒文档打开新窗口,而不强制它们使用沙盒标志。例如,这将允许第三方广告被安全地沙箱化,而不会对广告链接到的页面施加相同的限制参考文献: