iFrame跨源通信

时间:2014-07-23 14:06:34

标签: html5 security iframe same-origin-policy

我正在尝试从 iFrame src加载的其中一个js文件中访问父对象。页面和 iFrame src位于不同的域中。由于网络安全和相同的原始政策,我得到“未捕获的安全错误: Blocked a frame with origin "http://example.com:1211" from accessing a cross-origin frame"

需要访问父对象并设置为iFrame变量之一。所以,我失去了 window.postMessage()的选项。有什么方法可以解决这个问题吗?请提出一些建议。

1 个答案:

答案 0 :(得分:0)

与SilverlightFox一样,postMessage()应该可以在不同的域中运行。

您是否可以访问父级和iframe src?如果是这样,您可以在iframe src中添加这样的内容来发送消息:

<script type="text/javascript">
function post(msg) {
        var msg = "Do something"; // Can be string or numeric.
        parent.postMessage(msg, '*');
    }
    post();
</script>

然后在您的父母那里收到消息:

<script>    
function listener(event){ 
   if (event.origin !== 'https://myotherdomain.com' ){  //Optional check for message source
      return 
   }
   var info = event.data;
   DoSomething(info);
}

// Set up event handler when parent page loads.

if (window.addEventListener){ 
   addEventListener("message", listener, false) 
} else { 
   attachEvent("onmessage", listener) 
}
</script>