[javascript] postmessage
摘要
postmessage 作为 html5 跨域传值的解决方法,灰常好用啊。。本次用的是页面a 用iframe 嵌入 页面b。
使用方法
postmessage 参数
otherWindow.postMessage(message, targetOrigin, [transfer]);
message 为 待传递的信息,字符串
targetOrigin 为可接收此信息的页面范围, 一般为域名 , 如果 是 '*' 的话,表示不限制
transfer 参数可省略,一般写false。 Is a sequence of Transferable objects that are transferred with the message. The ownership of these objects is given to the destination side and they are no longer usable on the sending side. 看官方的解答应该是数据序列化,然后指定发送端是否可使用该信息。
坑
父页面a 传数据时一定要在 子页面 addEventlistener 之后,否则子页面是接收不到数据的。所以我们在使用时,可以参考通信中的三次握手。 子页面addEventlistener 之后 ,采用 postmessage send 信息给父页面,告诉父页面,子页面已经准备好了,可以传数据了。如此避免数据丢失!!!
原生 js 版本
页面a
<iframe src="页面b URL" id="test"></iframe>
window.addEventListener('message', function(event) {
var data = event.data;
if (data == 'ready') { // 子页面准备完毕,向其发送信息
document.getElementById('#test').contentWindow.postMessage('parent ready', '*');
}else {
console.log('接收到子页面信息');
}
}, false);
页面b
window.addEventListener('message', function(event) {
var data = event.data;
console.log('接收到父页面信息');
}, false);
//向父页面发送信息
window.parent.postMessage('xx', '*');
jquery 版本
页面a
<iframe src="页面b URL" id="test"></iframe>
window.addEventListener('message', function(event) {
var data = event.data;
if (data == 'ready') { // 子页面准备完毕,向其发送信息
$('#test')[0].contentWindow.postMessage('parent ready', '*');
}else {
console.log('接收到子页面信息');
}
}, false);
页面b
window.addEventListener('message', function(event) {
var data = event.data;
console.log('接收到父页面信息');
}, false);
//向父页面发送信息
window.parent.postMessage('xx', '*');
可参考资料
[javascript] postmessage的更多相关文章
- [javascript]模块化&命名污染—from 编程精解
最近看了编程精解里面的模块化一章,很受启发. /****************/ 在开发的实际过程中,根据页面或者逻辑布局,js代码可以按照功能划分为若干个区块:数据交互.表单验证.页面布局等等模块 ...
- [caffe]linux下安装caffe(无cuda)以及python接口
昨天在mac上折腾了一天都没有安装成功,晚上在mac上装了一个ParallelDesktop虚拟机,然后装了linux,十分钟就安装好了,我也是醉了=.= 主要过程稍微记录一下: 1.安装BLAS s ...
- [Swift]基础
[Swift]基础 一, 常用变量 var str = "Hello, playground" //变量 let str1="Hello xmj112288" ...
- [Ruby on Rails系列]4、专题:Rails应用的国际化[i18n]
1. 什么是internationalization(i18n)? 国际化,英文简称i18n,按照维基百科的定义:国际化是指在设计软件,将软件与特定语言及地区脱钩的过程.当软件被移植到不同的语言及地区 ...
- [译]一个灵活的 Trello 敏捷工作流
[译]一个灵活的 Trello 敏捷工作流 翻译自 An Agile Trello Workflow That Keeps Tasks Flexible Getting things done 可不只 ...
- iOS10收集IDFA,植入第三方广告[终结]--ADMob
[PS: 前段时间,公司做ASO推广,需要在应用中收集IDFA值,跟广告平台做交互!于是有了这个需求--] 1.首先,考虑了一下情况(自己懒 -_-#),就直接在首页上写了一个Banner,循环加载广 ...
- Java基础 之软引用、弱引用、虚引用 ·[转载]
Java基础 之软引用.弱引用.虚引用 ·[转载] 2011-11-24 14:43:41 Java基础 之软引用.弱引用.虚引用 浏览(509)|评论(1) 交流分类:Java|笔记分类: Ja ...
- CSU 1642 Problem B[难][前缀和]
Description 已知两个正整数a和b,求在a与b之间(包含a和b)的所有整数的十进制表示中1出现的次数. Input 多组数据(不超过100000组),每组数据2个整数a,b.(1≤a,b≤1 ...
- [ufldl]Supervised Neural Networks
要实现的部分为:forward prop, softmax函数的cost function,每一层的gradient,以及penalty cost和gradient. forwad prop forw ...
随机推荐
- 关于iphone点击readonly的input虚拟键盘不消失的情况
今天遇到了一个比较棘手的问题,事情是这样的: 咱有一个添加地址的页面,大概长这样: 收货地址后那个"请选择收货地址"是一个readonly的input, 咱一进页面,直接点击这个& ...
- 一步一步教你将开源项目上传到jcenter
最近闲着看了一下jcenter的使用,也想将自己使用频率比较高的东西抽成类库,然后通过compile来使用,提高开发效率,本来以为挺简单的,但是网上介绍的比较模糊,很多博客也比较老了,不适用,花了我一 ...
- B. Karen and Coffee
B. Karen and Coffee time limit per test 2.5 seconds memory limit per test 512 megabytes input standa ...
- 避免循环做SQL操作
经常犯的错误是把一个SQL 操作放置到一个循环中, 这就导致频繁的访问数据库,更重要的是, 这会直接导致脚本的性能低下.以下的例子, 你能够把一个循环操作重置为一个单一的SQL语句. foreach ...
- thinkphp导出csv格式的表格
<?php /** * Created by PhpStorm. * User: hanks * Date: 2016/4/20 * Time: 13:51 */ namespace Home\ ...
- mysql 左连接 右连接 内链接
一般所说的左连接,右连接是指左外连接,右外连接.做个简单的测试你看吧.先说左外连接和右外连接:[TEST1@orcl#16-12月-11] SQL>select * from t1;ID NAM ...
- Spring Boot 集成swagger实例
原文:https://github.com/x113773/testall/issues/5 1. 首先添加maven依赖``` <dependency> <groupId>i ...
- 【Android Developers Training】 57. 在UI线程之外处理图像
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Vim练级笔记(持续更新)
漫漫练级路...作为一个VS重度依赖患者,又加上visual assist X 这种懒人必备的神级插件,转投vim门下,真是各种疼... vim用着用着就有拿鼠标去点的冲动,有木有啊! 不过经过一段时 ...
- Redis事务原理分析
Redis事务原理分析 基本应用 在Redis的事务里面,采用的是乐观锁,主要是为了提高性能,减少客户端的等待.由几个命令构成:WATCH, UNWATCH, MULTI, EXEC, DISCARD ...