AJAX跨域请求的实现
跨域就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是c.a.com域名下的对象。例如 http://www.a.com/a.js 与以下同域:
- http://www.a.com/b.js
- http://www.a.com/script/b.js
与以下域名不同域:
- http://www.a.com:8080/a.js //端口不同
- https://www.a.com/b.js //协议不同
- http://70.32.92.74/b.js //对应IP 依旧不同域
- http://script.a.com/b.js //子域不同
- http://a.com/b.js //子域不同
即:域仅仅是通过“URL的首部”来识别,即window.location.protocol +window.location.host,也就是说域名, 协议与端口三者都相同才算是一个域。
跨域调用的方法
主要有以下几种:
- 利用FLASH ,即JS传递数据到FLASH,由FLASH进行提交,参考这里
- 同主域时候使用document.domain,但是有安全隐患,参考这里
- 不同主域的时候使用Iframe,其中又有location.hash(参考这里),window.name(参考这里)或是代理iframe(后面有说明)几种方式实现数据交互
- JSONP – 即动态加载<script>标签,达到模拟GET请求的目的,同时反馈回来的数据可以直接被执行 参考这里
- HTML5 postMessage接口 它可以在指定的iframe和window之间实现消息的传递 可以参考这里
- HTML5 webSocket 也可以实现跨域调用,可以参考 http://html5demos.com/web-socket
不同域时的代理IFRAME说明
主域不同的时候我们可以使用间接的代理,其实现原理是基于 同域的窗口和框架能够互相调用JS实现数据传递
例如域a.com上的原页面为A,通过iframe加载b.com上的页面B,B上再通过一个iframe加载a.com上的页面C。即A > B > C,其值是向下传递的。 而C可以直接调用A上的方法和属性,例如
window.parent.parent.alert(0);
调用A页面上的alert。
大家可以用手机或是电脑访问 http://bigline.cn/lab/crossdomain/ 进行测试(其中本域为 bigline.cn 调用的域为 cidu.jx.cn)




