IE11是否支持window.postMessage()

时间:2016-06-21 03:00:56

标签: javascript html5 cross-domain postmessage

我使用window.postMessage进行跨域弹出通信。 firefox和chrome上的一切似乎都运行良好。主要问题是IE11。 我在IE11的多个系统上进行了测试,对于很少的系统来说它的工作正常,但对于其他系统,它似乎不会在父页面上监听消息。

由于我们所有人(测试过的人)都在同一个网络下,因此我们拥有相同版本的IE。 确切版本:11.0.9600.18314CO。自从过去两天以来非常令人沮丧。

更新

我看到不同浏览器中的文档模式不同。在我的浏览器上,网站加载了EDGE,一切正常。在其他一些系统中,它以IE7模式加载并导致问题。

现在我不确定为什么同一网站的文件模式在不同的系统IE上有所不同。

这是一个例子: http://plnkr.co/edit/pK4XBJDrqFrE7awvMlZj?p=preview



Page 1: 
<!DOCTYPE html>
<html>
<head>
  <script>
    var popup = window.open("popup.html", "popup", "width=200,height=200");
    function receiveMessage(event) {
      if (event.origin === "http://run.plnkr.co") {
        console.log(event, event.data);
        this.location.href = event.data;
      }
    }
    window.addEventListener("message", receiveMessage, false);
  </script>
</head>
<body>
</body>
</html>

Page 2:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
  <form>
    <input type="button" value="Save">
  </form>
    <script>
    console.log(window.opener);
    var button = document.querySelector("form input[type=button]");
    button.onclick = function(e) {
      e.preventDefault();
      e.stopPropagation();
      window.opener.postMessage("redirect.html"
                    , window.opener.location.href);
      window.close();
    }
    </script>
</body>
</html>

Page 3:

<!doctype html>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<meta charset='utf-8' />
<style type='text/css'></style>


</head>
<body>
redirected
</body>
</html>
&#13;
&#13;
&#13;

任何帮助将不胜感激..

1 个答案:

答案 0 :(得分:1)

我有相同的条件 - 跨域弹出窗口对话框和非常相似的代码,这也无法在IE11中工作(旧版本与我无关)。 在我的情况下,我发现它不起作用,因为 Internet Explorer安全区域

我的开启页面是在受信任的网站中,对话框页面不是。如果两个站点都具有相同的区域(可信任或互联网),则可以找到它。

在我的测试中,在我看来,由于window.opener.location.href,您的代码无效。可能你无法访问开窗器属性。如果我将其更改为特定域,则它开始起作用。