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+WebService 校验账号是否已被注册的代码
Jul 12 Javascript
Jquery上传插件 uploadify v3.1使用说明
Jun 18 Javascript
js 为label标签和div标签赋值的方法
Aug 08 Javascript
js构造函数、索引数组和属性的实现方式和使用
Nov 16 Javascript
js插件YprogressBar实现漂亮的进度条效果
Apr 20 Javascript
关于微信上网页图片点击全屏放大效果
Dec 19 Javascript
原生js二级联动效果
Jun 20 Javascript
浅谈react前后端同构渲染
Sep 20 Javascript
js中getBoundingClientRect的作用及兼容方案详解
Feb 01 Javascript
利用vscode调试编译后的js代码详解
May 14 Javascript
Vue表单demo v-model双向绑定问题
Jun 29 Javascript
Vue项目查看当前使用的elementUI版本的方法
Sep 27 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 获取远程文件大小的3种解决方法
2013/07/11 PHP
PHP多线程类及用法实例
2014/12/03 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
Laravel5.1框架路由分组用法实例分析
2020/01/04 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
javascript整除实现代码
2010/11/23 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
BootStrap Table 后台数据绑定、特殊列处理、排序功能
2017/05/27 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
python sys模块sys.path使用方法示例
2013/12/04 Python
Python的Django框架安装全攻略
2015/07/15 Python
Python操作MySQL数据库9个实用实例
2015/12/11 Python
Python global全局变量函数详解
2018/09/18 Python
Python WEB应用部署的实现方法
2019/01/02 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
交通专业个人自荐信格式
2013/09/23 职场文书
专科毕业生求职简历的自我评价
2013/10/12 职场文书
护士求职自荐信范文
2014/03/19 职场文书
秋天的图画教学反思
2014/05/01 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
大学毕业生推荐信
2014/07/09 职场文书
关于旅游的活动方案
2014/08/15 职场文书
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js
SQL实现LeetCode(175.联合两表)
2021/08/04 MySQL