使用html5 postMessage和window.name实现多浏览器跨域

标签: JavaScript postMessage window.name 跨域 | 发表时间:2011-09-08 09:40 | 作者:断桥残雪 BeerBubble
出处:http://www.js8.in

跨域是个“很古老”的问题,因为浏览器的同源策略,导致不同域名下不能进行跨域名请求数据,虽然这样设计安全了很多,但是对于大型的网站同时维护多个域名就需要进行跨域操作。例如:微博开放平台的jssdk实现的跨域请求数据,再例如weibo.com和sina.com的同步登录。

之前我也说过不少跨域的方式了,有结合服务器端的,有纯粹javascript实现的跨域,例如:《利用跨域资源共享(CORS)实现ajax跨域调用》、《用document.domain+iframe实现Ajax跨子域》、《通过JSONP实现完美跨域》。在我的上一篇文章《javascript入门到高级PPT》中也提到了跨域。
当然也有不少关于跨域的文章,例如口碑UED的文章《跨域资源共享的10种方式》等等。大家可以去阅读一下。

今天我说的html5 postMessage和window.name也不是一种新的跨域方式,因为有不少人写文章写了,而实际应用的我不知道有哪些人?不过新浪微博的新旧两个jssdk都是采用这种方式,包括之前的人人网的xd.html,当然现在的人人和facebook都是通过flash实现的跨域,这不是今天说的内容。

html5 postMessage实现跨域

postMessage是html5的一个新功能,可以实现不同域名之间的通信,通过给postMessage方式发送数据,监听则通过在父子窗口添加onmessage事件进行。
缺点也就很明显了,只有支持html5的浏览器才支持这种跨域方式,像IE6、7当然就拒之门外了!

window.name实现跨域

window.name实现跨域也是一个比较老的问题,之前kejun写过一个demo,可是给的却是同域名的通信。
其实kejun的实例中就是实现跨域的,不过他采用了同一个域名,而且过程比较崎岖:

  1. 建立iframe,指定src为被跨域的页面
  2. 被跨域文件修改window.name,将数据传给window.name
  3. 将iframe.src修改为本域代理文件,然后就可以取到contentWindow.name
  4. 进行处理数据,清除iframe

充分的运用了window.name因为页面的url改变而name不改变的特性。
但是如果我们是自己用,还是可以的,而如果我们放出去要别人使用我们写的东西,那样学习成本太大。

多浏览器双向跨域

为了解决上面的问题,我们使用的方法就是如果支持postMessage的浏览器就使用postMessage,如果不支持的就采用window.name的方式,幸运的是在IE6、7中支持跨域设置window.name,而我们就可以简单的通过window.name来跨域。然后建立计时器来监听window.name是否发生了变化,如果变化则接收并分析window.name,然后做请求。

废话不多说了~直接来个跨域的demo。

多浏览器双向跨域demo

收藏本文到:新浪微博 | QQ书签 | 人人网 | 豆瓣 | 开心网 | 腾讯微博 | Google书签 | 百度搜藏
声明:文章未声明为原创文章,本文链接 http://www.js8.in/752.html. 转载请注明转自 JS8.IN ™

相关文章


© 断桥残雪 for 断桥残雪部落格, 2011. | No comment |在微博关注我:@清-三水清
收藏到: 人人网 | 豆瓣 | 开心网 | QQ书签 | 新浪微博 | 腾讯微博
Post tags: , ,

相关 [html5 postmessage window] 推荐:

使用html5 postMessage和window.name实现多浏览器跨域

- BeerBubble - 断桥残雪部落格
跨域是个“很古老”的问题,因为浏览器的同源策略,导致不同域名下不能进行跨域名请求数据,虽然这样设计安全了很多,但是对于大型的网站同时维护多个域名就需要进行跨域操作. 例如:微博开放平台的jssdk实现的跨域请求数据,再例如weibo.com和sina.com的同步登录. 之前我也说过不少跨域的方式了,有结合服务器端的,有纯粹javascript实现的跨域,例如:《利用跨域资源共享(CORS)实现ajax跨域调用》、《用document.domain+iframe实现Ajax跨子域》、《通过JSONP实现完美跨域》.

双面玻璃窗:Twoface Window

- 无辣不欢 - 爱…稀奇~{新鲜:科技:创意:有趣}
来自设计师Junkyung Kim等人的创意,双面玻璃窗(Twoface Window),让玻璃窗绕着窗户的中轴转动开合,于是,当户外天气恶劣时,我们可以将窗户上的花盆转向室内,再不用临时搬来搬去那么麻烦了. 嗯,对园艺爱好者来说,这会是个不错的解决方案. 设计师:Junkyung Kim、Yonggu Do.

在Window平台安装MongoDB

- - BlogJava-首页技术区
本文介绍如何安装在windows 7中安装MongoDB. 注:MongoDB并不像Windows上安装其他软件,只需要下载Zip包并解压,然后配置数据存放目录并启动即可. 从MongoDB官方网站,根据你的平台选择对应的windows的压缩包并解压,本文解压到D:\mongodb\. 注:如果需要在命令行中快速使用MongoDB bin目录下的命令,可以将D:\mongoDB\bin加入到Window环境变量.

【Window 10 IoT - 1】Window 10系统安装(树莓派 Pi2) - 叶帆

- - 博客园_首页
(2)、8G 10速Micro SD卡. (3)、LCD显示器(如果是VGA接口,需要加一个HDMI转VGA模块). (5)、安装Windows 10的PC(需要物理直接安装,不能虚机机方式,本篇文章不是必须). (1)、Windows 10 IoT 树莓派固件(Windows_IoT_Core_RPI2_BUILD.zip).

Chameleon Window Manager – 标题栏按钮增强 | 小众软件 > 系统工具

- Choope - 小众软件
Windows 窗口右上角的三个耳熟能详的按钮是最大化/最小化/关闭. 可高级用户们对窗口管理的要求越来越多,三个按钮明显不够用. Chameleon Window Manager 为窗口栏增加更多按钮,扩展窗口管理功能. 下载(3.5MB): 官网 | 下载 | 来自小众软件. ©2011 Thruth for 小众软件 | 原文链接 | 0 留言 | 加入我们 | 投稿 | 订阅指南.

(负载均衡)Window 服务器下采用Apache2.2+JBoss7服务器集群

- - 开源软件 - ITeye博客
1.安装APCHE 2.2应用服务器 . 2.安装JBOSS 7.X. 找到APACHE安装目录. 修改 httpd.conf 文件,httpd是apache的主程序,基本对apache的配置都在这个文件里进行. a.将负载均衡需要使用的模块都打开(去掉#号即可),如下:. 继续往httpd.conf增加内容,首先增加 session sticky 设置.

HTML5 logo 发布

- Greyby - 酷壳 - CoolShell.cn
2011年1月19日,W3C发布了HTML5的log,打开W3C的页面,下在的图片印入眼前. 我的第一感觉,就像是看到了小时候看的八一电影制片产的电影. 这分明是号召全世界的无产Web程序员们团结起来,不畏艰难,不怕牺牲,一定要把HTML5的革命事业进行到底. 所以,请各位Web程序员不但在你们的HTML5的网页上加上下面的徽章(关于各个徽章的含义,请参看这里).

html5 canvas入门

- - Marshal's Blog
可以把canvas看做div,不过,它的长和宽不能通过css来定义,要使用标签属性:. 或者javascript对象属性设置:. 使用canvas,只有一种操作方式,使用javascript. 获得canvas对象的上下文对象,该对象是操作canvas的主要对象:. 使用canvas画最简单的线, 点击运行示例,结果看起来是这样:.

HTML5新特性

- - CSDN博客推荐文章
 通过fillStyle和strokeStyle 属性可以轻松的设置矩形的填充和线条. 颜色值使用方法和CSS 一样:十六进制数、rgb()、rgba() 和 hsla. 通过 fillRect可以绘制带填充的矩形. 使用 strokeRect 可以绘制只有边框没有填充的矩形. 如果想清除部分 canvas可以使用clearRect.

【转载】HTML5 Messaging

- - HTML5研究小组
HTML5 的Message API能够让HTML5页面之间传递消息,甚至这些页面可以不在同一样域名下. 为了让消息能从一个页面发送到另一个页面,主动发送消息的页面必须拥有另一个页面的窗口引用. 然后发送 页面针对接受页调用 postMessage() 方法. postMessage() 方法中 origin 参数的值必须与页面所在的iframe的域名相匹配.