window.name实现ajax跨域post请求

首先不得不佩服想出用window.name来传递和保存数据的人!

 

项目中需要用到ajax跨域作post请求,原本以为是没法解决的问题,没想到找到了window.name

 

http://www.blueidea.com/tech/web/2008/6147.asp

 

window.name 传输技术,原本是 Thomas Frank 用于解决 cookie 的一些劣势(每个域名 4 x 20 Kb 的限制、数据只能是字符串、设置和获取 cookie 语法的复杂等等)而发明的(详细见原文:《Session variables without cookies》),后来 Kris Zyp 在此方法的基础上强化了 window.name 传输 ,并引入到了 Dojo dojox.io.windowName),用来解决跨域数据传输问题。

 

window.name 的美妙之处:name 值在不同的页面(甚至不同域名)加载后依旧存在,并且可以支持非常长的 name 值(2MB)。

大致原理就是:

1, 请求前,在页面上创建一个iframe,地址是被请求的页面

2, 将请求post到该iframe

3, 服务器端将数据写入window.name, 实际上写入到了页面上新建的这个iframe的window.name

4, 修改iframe的src(window.name是不变的,关键),改成同域的某个地址,比如:http://yourdomain.com/robots.txt

5, 直接访问该iframe的window.name获取数据

 

window.name的jquery实现:

 

http://plugins.jquery.com/project/windowNameTransport

 

(不知道为什么jquery的实现代码量那么大)

 

首先需要在域名根目录下放置一个空文件robots.txt (实际上可以为任意文件,但一般都会有robots.txt或crossdomain.xml这几个文件)

 

代码片段:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值