window.name 传输技术,原本是 [url=http://www.thomasfrank.se/about.html]
Thomas Frank[/url] 用于解决 cookie 的一些劣势(每个域名 4 x 20 Kb 的限制、数据只能是字符串、设置和获取 cookie 语法的复杂等等)而发明的(详细见原文:[url=http://www.thomasfrank.se/sessionvars.html]
《Session variables without cookies》[/url]),后来 [url=http://www.sitepen.com/blog/2008/07/22/windowname-transport/]
Kris Zyp[/url] 在此方法的基础上强化了 window.name 传输 ,并引入到了 [url=http://dojotoolkit.org/]
Dojo [/url]([url=http://bugs.dojotoolkit.org/ticket/6893]
dojox.io.windowName[/url]),用来解决跨域数据传输问题。
window.name 传输技术的基本原理和步骤为:
name 在浏览器环境中是一个全局/window对象的属性,且当在 frame 中加载新页面时,name 的属性值依旧保持不变。通过在 iframe 中加载一个资源,该目标页面将设置 frame 的 name 属性。此 name 属性值可被获取到,以访问 Web 服务发送的信息。但 name 属性仅对相同域名的 frame 可访问。这意味着为了访问 name 属性,当远程 Web 服务页面被加载后,必须导航 frame 回到原始域。同源策略依旧防止其他 frame 访问 name 属性。一旦 name 属性获得,销毁 frame 。
在最顶层,name 属性是不安全的,对于所有后续页面,设置在 name 属性中的任何信息都是可获得的。然而 windowName 模块总是在一个 iframe 中加载资源,并且一旦获取到数据,或者当你在最顶层浏览了一个新页面,这个 iframe 将被销毁,所以其他页面永远访问不到 window.name 属性。
基本实现代码,基于 YUI,源自 克军写的样例:
[url=http://www.1sucai.cn/article/15724_2.htm]2[/url][url=http://www.1sucai.cn/article/15724_2.htm]下一页[/url][url=http://www.1sucai.cn/article/15724_all.htm]阅读全文[/url]