首先不得不佩服想出用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这几个文件)
代码片段: