跨域的几种方式

什么是跨域:

协议、端口号、域名 都相同才是同一个域
只要有一个不同就算是跨域
主域名相同,子域名不同也算跨域
email.qq.com和zone.qq.com就属于主域相同,子域不同,也算是跨域
需要注意的是:协议不同(eg:https和http)或者端口号不同造成的跨域,前端是无法解决的

实际工作中,尤其是大公司,经常遇到需要跨域的情况


跨域的几种方式:

跨域的几种常见的方式有:

  1. jsonp
  2. window.name+iframe
  3. document.domain
  4. postmessage

下面一一介绍:

jsonp

img、iframe和script等标签的src是不受域名限制的,所以我们可以引用网络上的图片和脚本等资源,比如在线使用jquery,使用在线的图片等
jsonp正是利用了这一点
有一个json和jsonp的博客讲的很好
http://kb.cnblogs.com/page/139725/
jsonp的原理就是动态滴创建script标签,将script标签的src的url中传入要发给其他域服务器的数据,和接收服务器返回数据的函数名字
服务器可以根据接收到的url动态滴处理url返回数据等
比如:
src=”http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998&callback=flightHandler”
其中code是要传给服务器的数据
callback是你写的要接收服务器处理code并返回数据的函数

window.name

http://www.cnblogs.com/2050/p/3191744.html有更详细的解释
利用同一个窗口中的代码共享window.name属性这一特点,将window.name属性值设置为要传输的值
比如想在a.html中载入data.html中的数据,就需要设置data.html的window.name
不能a自动打开一个date.html获取数据,所以需要在a.html中设置一个隐藏的iframe接收data.html中的数据,
iframe的src要和data.html一样

document.domain+iframe(应用于主域相同,子域不同)

基于iframe实现的跨域要求两个域具有aa.xx.com,bb.xx.com这种特点,也就是两个页面必须属于一个基础域(例如都是xxx.com,或是xxx.com.cn),使用同一协议(例如都是 http)和同一端口(例如都是80),这样在两个页面中同时添加document.domain,就可以实现父页面调用子页面的函数

postmessage

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值