【问题标题】:IE PostMessage from sandboxed iframe to parent从沙盒 iframe 到父级的 IE PostMessage
【发布时间】:2020-01-06 18:09:18
【问题描述】:

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

这适用于 Chrome 和 FF,但不适用于 IE。经过调查,似乎 IE 中的沙盒 iframe 完全禁用了对window.parent 的访问,这也禁用了window.parent.contentWindow.postMessage()。如果我在 iframe 上“允许同源”,它会起作用,但在我的情况下,这不是选项。

我的印象是 postMessage 是用来解决跨源问题的,它的通信方式仅限于字符串,基本上就足够了。 Chrome 和 FF 的行为似乎证实了这一点。但是 IE 关闭了沙盒 iframe(我猜也是来自其他域的 iframe),以至于连 postMessage 都无法使用。

我迷路了。我错过了什么明显的东西吗?

【问题讨论】:

    标签: javascript internet-explorer


    【解决方案1】:

    由于我无法删除问题,我将发布“答案”。似乎问题假设了一些不正确的东西。即使 window.parent 是“权限被拒绝”,postMessage() 仍然有效,我错了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-16
      • 2014-05-16
      • 2017-11-17
      • 2013-04-24
      • 2014-03-06
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多