JavaScript使用HTML5的window.postMessage实现跨域通信例子


Posted in Javascript onApril 11, 2014

JavaScript由于同源策略的限制,跨域通信一直是棘手的问题。当然解决方案也有很多:
1.document.domain+iframe的设置,应用于主域相同而子域不同;
2.利用iframe和location.hash,数据直接暴露在了url中,数据容量和类型都有限
3.Flash LocalConnection, 对象可在一个 SWF 文件中或多个 SWF 文件间进行通信, 只要

在同一客户端就行,跨应用程序, 可以跨域。
window.name 保存数据以及跨域 iframe 静态代理动态传输方案,充分的运用了window.name因为页面的url改变而name不改变的特性。
各种方案网上都有很多实例代码,大家可以自己搜索一下。

html5中最炫酷的API之一:就是 跨文档消息传输Cross Document Messaging。高级浏览器Internet Explorer 8+, chrome,Firefox , Opera 和 Safari 都将支持这个功能。这个功能实现也非常简单主要包括接受信息的”message”事件和发送消息的”postMessage”方法。

发送消息的”postMessage”方法

向外界窗口发送消息:

otherWindow.postMessage(message, targetOrigin);

otherWindow: 指目标窗口,也就是给哪个window发消息,是 window.frames 属性的成员或者由 window.open 方法创建的窗口
参数说明:
1.message: 是要发送的消息,类型为 String、Object (IE8、9 不支持)
2.targetOrigin: 是限定消息接收范围,不限制请使用 ‘*'

接受信息的”message”事件

var onmessage = function (event) { 
var data = event.data; 
var origin = event.origin; 
//do someing 
}; 
if (typeof window.addEventListener != 'undefined') { 
window.addEventListener('message', onmessage, false); 
} else if (typeof window.attachEvent != 'undefined') { 
//for ie 
window.attachEvent('onmessage', onmessage); 
}

回调函数第一个参数接收 Event 对象,有三个常用属性:
1.data: 消息
2.origin: 消息来源地址
3.source: 源 DOMWindow 对象

当然postmessage也有一些不足的地方:
1.ie8,ie9下传递的数据类型值支持字符串类型,不过可以使用用 JSON对象和字符串之间的相互转换 来解决这个问题;
2.ie6,ie7需要写兼容方案,个人认为window.name比较靠谱;

Javascript 相关文章推荐
利用javascript查看html源文件
Nov 08 Javascript
玩转方法:call和apply
May 08 Javascript
初识SmartJS - AOP三剑客
Jun 08 Javascript
js读取csv文件并使用json显示出来
Jan 09 Javascript
jQuery中offsetParent()方法用法实例
Jan 19 Javascript
从0开始学Vue
Oct 27 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
Feb 22 Javascript
jQuery插件Validation表单验证详解
May 26 jQuery
深入浅析angular和vue还有jquery的区别
Aug 13 jQuery
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
Nov 12 Javascript
关于Vue源码vm.$watch()内部原理详解
Apr 26 Javascript
node.js如何操作MySQL数据库
Oct 29 Javascript
jQuery实现鼠标经过图片预览大图效果
Apr 10 #Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
Apr 10 #Javascript
js获取视频时长代码
Apr 10 #Javascript
js转化毫秒为时间格式代码
Apr 10 #Javascript
jquery移除、绑定、触发元素事件使用示例详解
Apr 10 #Javascript
jquery序列化表单去除指定元素示例代码
Apr 10 #Javascript
jquery删除ID为sNews的tr元素的内容
Apr 10 #Javascript
You might like
模仿OSO的论坛(一)
2006/10/09 PHP
PHP的分页功能
2007/03/21 PHP
让PHP COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
php获取域名的google收录示例
2014/03/24 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
JQuery标签页效果实例详解
2015/12/24 Javascript
AngularJs Understanding the Controller Component
2016/09/02 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
Python的Bottle框架中返回静态文件和JSON对象的方法
2015/04/30 Python
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
详解python 发送邮件实例代码
2016/12/22 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
什么是python的自省
2020/06/21 Python
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
自动化专业本科毕业生求职信
2013/10/20 职场文书
《愚公移山》教学反思
2014/02/20 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
2014年仓管员工作总结
2014/11/18 职场文书
导游欢迎词范文
2015/01/23 职场文书
2015年度个人教学工作总结
2015/05/20 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python