我使用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;
任何帮助将不胜感激..
答案 0 :(得分:1)
我有相同的条件 - 跨域弹出窗口对话框和非常相似的代码,这也无法在IE11中工作(旧版本与我无关)。 在我的情况下,我发现它不起作用,因为 Internet Explorer安全区域。
我的开启页面是在受信任的网站中,对话框页面不是。如果两个站点都具有相同的区域(可信任或互联网),则可以找到它。
在我的测试中,在我看来,由于window.opener.location.href
,您的代码无效。可能你无法访问开窗器属性。如果我将其更改为特定域,则它开始起作用。