window.name 结合postMessage api 实现跨域

html5 postMessage实现跨域

postMessage是html5的一个新功能,可以实现不同域名之间的通信,通过给postMessage方式发送数据,监听则通过在父子窗口添加onmessage事件进行。

缺点也就很明显了,只有支持html5的浏览器才支持这种跨域方式,像IE6、7当然就拒之门外了!

window.name实现跨域

流程如下:

  1. 1 建立iframe,指定src为被跨域的页面
  2. 2 被跨域文件修改window.name,将数据传给window.name
  3. 3 将iframe.src修改为本域代理文件,然后就可以取到contentWindow.name
  4. 4 进行处理数据,清除iframe

充分的运用了window.name因为页面的url改变而name不改变的特性。
但是如果我们是自己用,还是可以的,而如果我们放出去要别人使用我们写的东西,那样学习成本太大。

多浏览器双向跨域

为了解决上面的问题,我们使用的方法就是如果支持postMessage的浏览器就使用postMessage,如果不支持的就采用window.name的方式,幸运的是在IE6、7中支持跨域设置window.name,而我们就可以简单的通过window.name来跨域。然后建立计时器来监听window.name是否发生了变化,如果变化则接收并分析window.name,然后做请求。

废话不多说了~直接来个跨域的demo,点击查看多浏览器双向跨域demo

参考:http://www.veryhuo.com/a/view/38855.html

你可能感兴趣的:(window.name 结合postMessage api 实现跨域)