使用postMessage在不同iframe间跨域传递消息

iframe同源策略

如果父窗口访问一个不同域名的子窗口就会报错:
Uncaught DOMException: Blocked a frame with origin "xxx" from accessing a cross-origin frame.
如何解决呢?一个简单的思路就是,既然是因为不同源,那么再建一个同源的窗口不久可以了吗?一个同源的子窗口能读取父窗口无法访问的子窗口的内容,然后通过postMessage传递给父窗口就可以了。

//http://app1.test.local/frame_exec.html
window.onload=function(){
    var h1_content=parent.window.frames[‘app1‘].document.getElementById(‘frameTitle‘).innerHTML;
    parent.postMessage({name:‘tom‘,content:h1_content},‘http://app2.test.local‘);
};
<!--http://app1.test.local/iframe.html-->
<h1 id="frameTitle">This is a content in cross domain iframe!</h1>
<!--http://app2.test.local/main_frame.html-->
<iframe name="app1" id="app1" src="http://app1.test.local/iframe.html"></iframe>
<iframe name="app1Exec" id="app1Exec" src="http://app1.test.local/iframe_exec.html"></iframe>
<script>
window.onload=function(){
//Uncaught DOMException: Blocked a frame with origin "http://app2.test.local" from accessing a cross-origin frame.
    console.info(document.getElementById(‘app1‘).contentWindow.document.getElementById(‘frameTitle‘));
};
window.addEventListener(‘message‘,function(e){
//{name: "tom", content: "This is a content in cross domain iframe!"}
    console.info(e.data);
},false);
</script>

原文地址:https://blog.51cto.com/14043491/2367593

时间: 2024-10-08 16:15:58

使用postMessage在不同iframe间跨域传递消息的相关文章

javascript跨域传递消息总结

参考文档,下面有转载: http://www.cnblogs.com/loveis715/p/4592246.html [跨源的各种方法总结] http://kb.cnblogs.com/page/139725/    [jsonp的介绍] [jsonp的自己备注] 跨域访问一般都要受到同源政策限制,但是Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有”src”这个属性的标签都拥有跨域的能力,比如<script>.<img>.<iframe>

使用 postMessage + iframe 实现跨域通信

一.postMessage window.postMessage() 方法可以安全地实现跨源通信.通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口号(443为https的默认值),以及主机(两个页面的模数 Document.domain设置为相同的值)时,这两个脚本才能相互通信.window.postMessage() 方法提供了一种受控机制来规避此限制,只要正确的使用,这种方法就很安全. 调用 postMessage() 方法时,向目标窗口派发一个

使用 &lt;Iframe&gt;实现跨域通信

什么是iframe iframe就是我们常用的iframe标签:<iframe>.iframe标签是框架的一种形式,也比较常用到,iframe一般用来包含别的页面,例如我们可以在我们自己的网站页面加载别人网站或者本站其他页面的内容. iframe的用法有很多,接下来说一下iframe的其中一个比较实用的用法----跨域通信 假设现在有两个系统A,B:A系统的某个页面有一部分显示的内容是B系统的,怎么办? <div class="modal-body" id="

iframe显示跨域url页面

可以通过JS搞定跨域问题,但是比较麻烦,我就在后台处理了,其实这样本质上也算不上是跨域了 后台otherwebsite.php: <?php $url="www.otherwebsite.com"; echo " <html> <head> <title></title> <meta content='0; url={$url}' http-equiv='refresh'> </head> <

iframe的跨域高度自适应(通过跨域页面中嵌套本域页面)

实习不久接到一个任务,在网页中嵌套另一个工程的网页.本以为这是轻而易举的一件事情,结果被测试姐姐折腾得够呛.多次和我谈心说到这个高度固定导致iframe出现滚动条有多么不好看,对于工程整体的影响有多么恶劣.因为跨域的原因,这个需求被拖了许久,真是很痛苦的一件事.最终在我离开公司之前搞定了这个单. 这里就把我的研究过程写下来以供大家参考. 首先需要了解一下何为同域,何为跨域: URL 说明 是否允许通信 http://www.a.com/a.jshttp://www.a.com/b.js 同一域名

iframe的跨域问题

参考  http://www.cnblogs.com/pigtail/archive/2013/01/24/2875310.html: 实现过程a.html.c.html在一个域名 b.html在自己的一个域名 用iframe a.html   嵌入b.html     b.html中嵌入c.html 因为a.html和c.html在同一个域名 所以a和c可以通信. b.html  <iframe src="xxxx/c.html?=" +userinfo> 即可把b.ht

js利用form+iframe解决跨域post和get提交

JS跨域提交               ajax可以让我们对页面进行无刷新的操作,给我们前端和后台数据交互带来更多的体验,这里就不多说了,但ajax也有局限性,由于浏览器有安全机制,不 允许我们访问不同域的数据,也就是我们常说的"同源策略",大家可以去了解一下.但我们有时候又有这样的需求,下面我们浅谈一下,解决这种问题的办法. 1.jsonp格式 优点:跨域提交 缺点: 只能进行get方式访问 2.js+form+iframe+php 优点:跨域提交get和post的方式访问都是可以

跨域传递

//由于浏览器的同源策略原则,所以无法跨域传值,但可以用js原理来实现 方法一:用jquery中的jsonp 请求文件: <!DOCTYPE> <html> <head> <title>lin3615</title> <script src="jquery-1.8.3.min.js" type="text/javascript"></script> <script> $(

使用 X-Frame-Options 防止被iframe 造成跨域iframe 提交挂掉

Refused to display 'http://www.***.com/login/doLogin.html' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'. 触发原因:页面的返回头被设置 X-Frame-Options SAMEORIGIN ,只能被同源的iframe 引用.跨域名的iframe 没法显示了. 解决办法:第一步 把 服务器上的 X-Frame-Options header 去掉 第二步 添加 如下代