我目前正在为文件的同源政策而苦苦挣扎:我的一个完全基于文件的项目已经工作了多年,直到政策改变为止。该项目包含index.html:
<html>
<body>
<table>
<tbody>
<tr>
<td>
<iframe id="frame1" src="frame1.html" width="220" height="450"></iframe>
</td>
<td>
<iframe id="frame2" src="frame2.html" width="850" height="450"></iframe>
</td>
</tr>
</tbody>
</table>
</body>
</html>
以及另外两个作为iframe包含的文件(frame1.html和frame2.html)。在frame1.html和frame2.html中,我执行以下javascript调用:
parentWindow = window.parent;
var frames = parentWindow.frames;
为了通过
访问另一帧的数据frames[x].
接着是所需的属性。
根据https://developer.mozilla.org/en-US/docs/Archive/Misc_top_level/Same-origin_policy_for_file:_URIs,它应该起作用,因为两个框架的祖先都使用index.html,但是(例如,在Firefox中)我收到此错误消息:
SecurityError:拒绝访问跨域对象上的属性的权限
有人可以帮忙吗?我可能必须删除iframe吗?任何提示表示赞赏!
非常感谢, 最好
亚历克斯
答案 0 :(得分:-1)
与直接iframe访问有关的所有操作均失败,但是,我找到了一种对我来说很有效的替代方法:我不是使用iframe之间的直接通信,而是使用父级作为中继。在这种情况下,我通过以下方式发送消息
equals
从父级iframe中将其转发到目标iframe。通过侦听器在父级和iframe处接收消息:
window.top.postMessage(['destinationIframe','desiredFunction',data1,..,dataX],'*');