此代码我在Chrome / FF / safari中运行,但不适用于IE9。我试图找出IE的错误。
Domain1.com在domain2.com上托管了一个iframe - iframe触发弹出窗口(托管在domain2.com上),然后弹出一个链接a)将domain1.com页面转发到domain2.com和b上的某个地方)关闭弹出窗口。
我的代码基于this post/answer
1)domain1.com(上面有iframe和用于处理事件的IE特定代码)
<script type="text/javascript">
if(navigator.appName == "Microsoft Internet Explorer")
window.attachEvent("onmessage", receiveMessage);
else
window.addEventListener("message", receiveMessage, false);
function receiveMessage(e) {
if(e.origin == "http://www.domain2.com") //important for security
if(e.data.indexOf('redirect:') == 0)
document.location = e.data.substr(9);
}
</script>
<iframe src="http://www.domain2.com/iframetest_deleteme.html" width="400" height="150">
</iframe>
2)domain2.com(iframe的内容,JS只是一个poup)
<script type="text/javascript" >
jQuery(function($){
$("a[rel*=external]").click(function(){
window.open("http://domain2.com/iframetest_deleteme_popup.html", "", "location=0, menubar=0, resizable=no, toolbar=no, menubar=no, scrollbars=no, width=300, height=100")
return false;
});
});
</script>
<a href="#" rel="external">open popup from iframe</a>
3)domain2.com(弹出窗口的内容 - JS应该重定向弹出窗口的父级)
<script type="text/javascript">
jQuery(function($){
$("a[rel*=external]").click(function(){
opener.parent.postMessage('redirect:http://www.google.com', 'http://domain1.com');
window.close(this);
return false;
});
});
</script>
<p><a href="#" rel="external">javascript link</a></p>
我已经玩了很长时间了,并且无法弄清楚为什么IE9不能使用它。
它是实时的,可在此处的所有非IE浏览器中进行测试/查看:http://alexhays.com/test/
答案 0 :(得分:1)
http://www.felocity.com/article/window_postmessage_problems_and_workarounds_for_ie8/