allow-same-origin 不允许我访问***对象的属性
Posted
技术标签:
【中文标题】allow-same-origin 不允许我访问***对象的属性【英文标题】:allow-same-origin doesn't allow me to access properties of top object 【发布时间】:2021-12-09 11:17:11 【问题描述】:我在页面example1.com
中有如下代码:
<iframe src='//example2.com/embed.html' sandbox="allow-same-origin allow-modals allow-scripts allow-top-navigation allow-top-navigation-by-user-activation">
我的embed.html
中有以下代码
<script>
try
document.write('top url: ' + top.location.href)
catch (e)
document.write('error' + e);
</script>
我得到错误:
SecurityError: Blocked a frame with origin "https://example2.com" from accessing a cross-origin frame.
我只想获取 top
对象的属性,并且在 iframe 代码中使用标签 allow-same-origin
。这个标签不允许我以同源运行 iframe 吗?如果没有,为什么我们有那个标签?
【问题讨论】:
【参考方案1】:example1.com
和 example2.com
是不同的域,因此您在 CORS(跨域资源共享)方面存在问题,但与内容安全策略无关。 CORS 仅允许在相同域或域及其子域之间进行直接访问。
您无法在跨源 iframe 中获取 top.location.href
属性,但您可以设置它:top.location.href = 'https://any_domain.com/path.html'
如果 allow-top-navigation
出现在 sandox
属性中或 sandbox
不存在。
sandbox
属性不能帮助绕过 CORS 限制,它只能对 iframe 内部的功能施加额外的限制。
您可以使用window.postMessage() 方法在页面和嵌入其中的 iframe 之间进行跨域通信。
【讨论】:
以上是关于allow-same-origin 不允许我访问***对象的属性的主要内容,如果未能解决你的问题,请参考以下文章