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 相关文章推荐
jQuery 对Select的操作备忘记录
Jul 04 Javascript
js限制文本框只能输入数字(正则表达式)
Jul 15 Javascript
js实现TAB切换对应不同颜色的代码
Aug 31 Javascript
Bootstrap插件全集
Jul 18 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
Sep 19 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
Nov 20 Javascript
基于javascript实现数字英文验证码
Jan 25 Javascript
Vue 全家桶实现移动端酷狗音乐功能
Nov 16 Javascript
JavaScript如何实现元素全排列实例代码
May 14 Javascript
django中使用vue.js的要点总结
Jul 07 Javascript
JS实现网站吸顶条
Jan 08 Javascript
js实现列表按字母排序
Aug 11 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 缓存函数代码
2008/08/27 PHP
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
利用php生成验证码
2017/02/23 PHP
jQuery Autocomplete自动完成插件
2010/07/17 Javascript
JavaScript将相对地址转换为绝对地址示例代码
2013/07/19 Javascript
Javascript 浮点运算精度问题分析与解决
2014/03/26 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
JS防止网页被嵌入iframe框架的方法分析
2016/09/13 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
axios 处理 302 状态码的解决方法
2018/04/10 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
python爬取个性签名的方法
2018/06/17 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
详细分析Python垃圾回收机制
2020/07/01 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
2013/07/19 HTML / CSS
印尼购物网站:iLOTTE
2019/10/16 全球购物
Blank NYC官网:夹克、牛仔裤等
2020/12/16 全球购物
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
财会自我鉴定范文
2013/12/27 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
环卫工人慰问信
2015/02/15 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
如何使用PostgreSQL进行中文全文检索
2021/05/27 PostgreSQL
利用 JavaScript 构建命令行应用
2021/11/17 Javascript
JavaScript异步操作中串行和并行
2021/11/20 Javascript
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js