从沙盒iframe到父级的IE PostMessage

时间:2018-01-08 17:36:09

标签: javascript internet-explorer cors

我有一个沙盒iframe,只设置了“allow-scripts”,其他一切都关闭了。在沙盒iframe中,访问者可以运行一些自定义脚本,这就是为什么我不想要“allow-same-origin”设置(会不安全)。所以我决定使用“PostMessage”在父级和框架之间进行通信。

这适用于Chrome和FF,但不适用于IE。在调查之后,似乎IE中的沙盒iframe完全禁用对window.parent的访问,这也会禁用window.parent.contentWindow.postMessage()。如果我在iframe上“允许同一个来源”,但是在我的情况下这不是选项,那么它可以工作。

我的印象是postMessage在那里打击交叉起源问题,并且它的通信方式,仅限于字符串,已经足够了。 Chrome和FF的行为似乎证实了这一点。但IE关闭沙盒iframe(我猜也是其他域名的iframe),甚至不能使用postMessage。

我迷路了。我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

由于我无法删除问题,我会发布"回答"。似乎问题是假设某些事情并非如此。即使window.parent被"权限被拒绝",postMessage()仍然有效,我错了。

让我困惑的是事件传递到接收端。在这种情况下,Chrome和FF会将event.source传递为null,而IE则会传递完整的网址,这在我的情况下是https://localhost:8080'。这个if语句失败并且没有处理消息导致我认为它根本没有被发送。

相关问题