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是怎么继承的介绍
Jan 05 Javascript
JavaScript 命名空间 使用介绍
Aug 29 Javascript
jQuery设置和获取HTML、文本和值示例
Jul 08 Javascript
js判断手机号运营商的方法
Oct 23 Javascript
JavaScript String 对象常用方法详解
May 13 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
Mar 14 Javascript
关于Promise 异步编程的实例讲解
Sep 01 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
Sep 26 Javascript
解决使用vue.js路由后失效的问题
Mar 17 Javascript
webpack手动配置React开发环境的步骤
Jul 02 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
Jul 21 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
Jul 30 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
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
CI框架Session.php源码分析
2014/11/03 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
JavaScript类和继承 constructor属性
2010/03/04 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
详解Vue的computed(计算属性)使用实例之TodoList
2017/08/07 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
使用jQuery动态设置单选框的选中效果
2018/12/06 jQuery
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
JavaScript 实现继承的几种方式
2021/02/19 Javascript
Python编程scoketServer实现多线程同步实例代码
2018/01/29 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
django正续或者倒序查库实例
2020/05/19 Python
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
入学证明
2015/06/23 职场文书
活动新闻稿范文
2015/07/17 职场文书
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2022/04/08 Java/Android
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL