window.name解决跨域数据传输问题

所属分类: 网页制作 / 应用技巧 阅读数: 1557
收藏 0 赞 0 分享

原文:http://research.microsoft.com/~helenw/papers/subspace.pdf
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)。
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,源自 克军写的样例:

(function(){
var YUD = YAHOO.util.Dom, YUE = YAHOO.util.Event;
dataRequest = {
_doc: document,
cfg: {
proxyUrl: 'proxy.html'
}
};
dataRequest.send = function(sUrl, fnCallBack){
if(!sUrl || typeof sUrl !== 'string'){
return;
}
sUrl = (sUrl.indexOf('?') > 0 ? '&' : '?') 'windowname=true';
var frame = this._doc.createElement('iframe'), state = 0, self = this;
this._doc.body.appendChild(frame);
frame.style.display = 'none';
var clear = function(){
try{
frame.contentWindow.document.write('');
frame.contentWindow.close();
self._doc.body.removeChild(frame);
}catch(e){}
};
var getData = function(){
try{
var da = frame.contentWindow.name;
}catch(e){}
clear();
if(fnCallBack && typeof fnCallBack === 'function'){
fnCallBack(da);
}
};
YUE.on(frame, 'load', function(){
if(state === 1){
getData();
} else if(state === 0){
state = 1;
frame.contentWindow.location = self.cfg.proxyUrl;
}
});
frame.src = sUrl;
};
})();
更多精彩内容其他人还在看

空路径对页面性能影响的解决方案

前几天在 Google Reader 中看到玉伯博客的分享——空路径对页面性能的影响。确实,在写 CSS 的时候,用 background:url(#) 还是会对页面进行多一次请求的
收藏 0 赞 0 分享

给web设计的新手们建议一些有用的学习资料

很多人问我当初怎么学习的web设计,其实我想说的是其实并不难,难得是自己没有坚持的勇气或者没有坚持的毅力
收藏 0 赞 0 分享

关于div+css及Web标准网页的好处

所谓“div+css”是网站标准(或称“Web标准”)中常用的术语之一,通常为了说明与html网页设计语言中的表格(table)定位方式的区别,因为xhtml网站设计标准中,不再使用表格定位技术,而是采用div+css的方式实现各种定位
收藏 0 赞 0 分享

HTML,CSS的命名习惯总结

HTML,CSS的命名习惯总结,网页前端开发的朋友可以参考下,利于别人阅读代码。
收藏 0 赞 0 分享

web前端工程师入门须知 推荐

本文是写给那些想要入门web前端工程的初学者,高手请路过,也欢迎高手们拍砖
收藏 0 赞 0 分享

编写高质量代码 Web前端开发修炼之道 书摘精要

Web标准由一系列标准组合而成,其核心理念是将网页的结构、样式和行为分离开来,所以它可以分为三大部分:结构标准、样式标准和行为标准
收藏 0 赞 0 分享

20个国外优秀的网页色彩搭配案例分享

网站给用户留下第一印象的既不是网站丰富的内容,也不是网站合理的布局,而是网站的色彩。色彩给人的视觉效果最明显,一个网站设计成功与否,在某种程度上就取决于设计者对色彩的运用和搭配
收藏 0 赞 0 分享

网页无法打开 原来是元素div缺少结束标记

前几天网站推出网站速度诊断功能,遇到一个比较奇怪的问题,就是网页有时候无法完全打开,只显示个头部,有时候刷新几次后可以完全显示,但大多数情况是不能完全打开网页,问题出在下半部网页那里
收藏 0 赞 0 分享

如何优化一个网站使之提高访问速度 更新

最近公司开始考核企业站下所有站点,首先从itpub开始进行。为此,开始学习关于如何优化一个网站使之提高访问速度这方面的知识
收藏 0 赞 0 分享

js、css、html判断浏览器的各种版本

js、css、html判断浏览器的各种版本 利用正则表达式来判断ie浏览器版本
收藏 0 赞 0 分享
查看更多