使用 <Iframe>实现跨域通信
什么是iframe
iframe就是我们常用的iframe标签:<iframe>。iframe标签是框架的一种形式,也比较常用到,iframe一般用来包含别的页面,例如我们可以在我们自己的网站页面加载别人网站或者本站其他页面的内容。
iframe的用法有很多,接下来说一下iframe的其中一个比较实用的用法----跨域通信
假设现在有两个系统A,B:A系统的某个页面有一部分显示的内容是B系统的,怎么办?
<div class="modal-body" id="housekeeperBody">
<iframe src="http://erp.young51.com/user/indexIframe.action" name="OpenartDialog14577934462321" frameborder="0" allowtransparency="true" style="width: 900px; height: 565px; border: 0px none;">
//这里就是你要加载的页面
</iframe>
</div>
这里iframe的核心属性就是“src”它表示你要引用的页面一个请求(这里的src实际就是对B系统的一个请求,B将返回你一个HTML,如果B系统是另外一个负责的,那么关于这个请求的另一端你就不必关心了)。和其他html标签一样,它也有一些其他的属性,如该列的name,height,style等等
读到这里会遇到一个问题
JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦。这里把涉及到跨域的一些问题简单地整理一下:
首先什么是跨域,简单地理解就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是c.a.com域名下的对象。更详细的说明可以看下表:
URL
第一,如果是协议和端口造成的跨域问题“前台”是无能为力的,
第二:在跨域问题上,域仅仅是通过“URL的首部”来识别而不会去尝试判断相同的ip地址对应着两个域或两个域是否在同一个ip上。
“URL的首部”指window.location.protocol +window.location.host,也可以理解为“Domains, protocols and ports must match”。
我的解决方案是:document.domain+iframe的设置
对于主域相同而子域不同的例子,可以通过设置document.domain的办法来解决。具体的做法是可以在http://www.a.com/a.html和http://script.a.com/b.html两个文件中分别加上document.domain = ‘a.com’;然后通过a.html文件中创建一个iframe,去控制iframe的contentDocument,这样两个js文件之间就可以“交互”了。
转载:http://xinsir.blog.51cto.com/5038915/1858731