location.hash+iframe 跨域解决方案

利用location.hash和iframe可以解决完全跨域的问题。其原理是利用location.hash传值,创建定时器,坚持hash的变化,执行相应的操作。
下面我们来完成一个案例:
在bao.com域名下有个index.html, 在index.html中通过iframe引入hui.com域名下header.html。使index.html和header.html可以相互通信。

index.html代码:



通过IFRAME 和 location.hash 进行javasript 跨域

引入header.html

hui.com下的 header.html代码:




点击改变主页面按钮颜色




现阶段index.html中可以更改引入的iframe的src的hash。header.html中通过定时器判断hash值的变化,做出相应的操作。但是在header.html不可以直接操作index.html的hash。如果直接用parent.locatin.hash = name;会出现
111111113324禁止跨域操作
此时需要引入一个代理文件(crossdomain.html),此文件与index.html同域,因此,index.html可以和crossdomian.html相互通信。通过在header.html中改变crossdomain.html的hash,在crossdomain.html中监听
hash的变化,在通过parent.parent.location.hash改变index.html的hash值。

crossdomain.html代码:


    
    

location.hash + iframe跨域的优点:
1.可以解决域名完全不同的跨域
2.可以实现双向通讯

location.hash + iframe跨域的缺点:
location.hash会直接暴露在URL里,并且在一些浏览器里会产生历史记录,数据安全性不高也影响用户体验。另外由于URL大小的限制,支持传递的数据量也不大。

你可能感兴趣的:(js)