摘要

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. 看官方的解答应该是数据序列化,然后指定发送端是否可使用该信息。

详细请见:https://www.baidu.com/link?url=e4KGAWVbYtXer7ucuLf8Q0oMFGUiFJQtj94pDUI8SURSXz8usBj5TeFXpYDjrCTfU7vjshl1smO4Kd3Q4E1jNcPN0YF6tS91hYpGAumJNj7&wd=&eqid=bf9cc4d7000167270000000457feee24

父页面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', '*');

可参考资料

张鑫旭 http://www.zhangxinxu.com/wordpress/2012/02/html5-web-messaging-cross-document-messaging-channel-messaging/

[javascript] postmessage的更多相关文章

  1. [javascript]模块化&命名污染—from 编程精解

    最近看了编程精解里面的模块化一章,很受启发. /****************/ 在开发的实际过程中,根据页面或者逻辑布局,js代码可以按照功能划分为若干个区块:数据交互.表单验证.页面布局等等模块 ...

  2. [caffe]linux下安装caffe(无cuda)以及python接口

    昨天在mac上折腾了一天都没有安装成功,晚上在mac上装了一个ParallelDesktop虚拟机,然后装了linux,十分钟就安装好了,我也是醉了=.= 主要过程稍微记录一下: 1.安装BLAS s ...

  3. [Swift]基础

    [Swift]基础 一, 常用变量 var str = "Hello, playground" //变量 let str1="Hello xmj112288" ...

  4. [Ruby on Rails系列]4、专题:Rails应用的国际化[i18n]

    1. 什么是internationalization(i18n)? 国际化,英文简称i18n,按照维基百科的定义:国际化是指在设计软件,将软件与特定语言及地区脱钩的过程.当软件被移植到不同的语言及地区 ...

  5. [译]一个灵活的 Trello 敏捷工作流

    [译]一个灵活的 Trello 敏捷工作流 翻译自 An Agile Trello Workflow That Keeps Tasks Flexible Getting things done 可不只 ...

  6. iOS10收集IDFA,植入第三方广告[终结]--ADMob

    [PS: 前段时间,公司做ASO推广,需要在应用中收集IDFA值,跟广告平台做交互!于是有了这个需求--] 1.首先,考虑了一下情况(自己懒 -_-#),就直接在首页上写了一个Banner,循环加载广 ...

  7. Java基础 之软引用、弱引用、虚引用 ·[转载]

    Java基础 之软引用.弱引用.虚引用 ·[转载] 2011-11-24 14:43:41 Java基础 之软引用.弱引用.虚引用 浏览(509)|评论(1)   交流分类:Java|笔记分类: Ja ...

  8. CSU 1642 Problem B[难][前缀和]

    Description 已知两个正整数a和b,求在a与b之间(包含a和b)的所有整数的十进制表示中1出现的次数. Input 多组数据(不超过100000组),每组数据2个整数a,b.(1≤a,b≤1 ...

  9. [ufldl]Supervised Neural Networks

    要实现的部分为:forward prop, softmax函数的cost function,每一层的gradient,以及penalty cost和gradient. forwad prop forw ...

随机推荐

  1. MVC架构简介及其测试策略

    最近在WEB端测试工作中陷入了瓶颈,单纯的手动功能测试在没有成熟的代码规范之前还是很容易坑的,WEB自动化测试一时半会还没有什么进展,所以决定先学习一下网站用的MVC架构,跟着教程写了一个小网站,大概 ...

  2. if 一元二次方程求根

    if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码 if...else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码 if...else if... ...

  3. Nignx入门location、root配置

    nginx的配置.首当其冲的就是location配置了,下面是笔记参考的博文链接 http://www.cnblogs.com/sunkeydev/p/5225051.html   location匹 ...

  4. Mac远程连接windows报错“证书或相关链无效,是否仍要连接到此计算机”的处理办法。

    这个主要是因为策略组设置的问题.详细的设置方法如下: 本地计算机策略>计算机配置>管理模板>windows组件>远程桌面服务>远程桌面会话主机>安全>远程(R ...

  5. C++ 安全单例模式总结

    前两天,一个C++ 的单例实现又掉坑里了.做好一个安全的单例模式可并不简单.这里总结一下C++ 的几个单例实现方案. 1. 函数静态变量法 利用单例函数的静态变量,实现单例构造.代码如下: class ...

  6. 【面经】腾讯和YY实习生面试总结

    [前言] 之前的四月份和五月份各面试了腾讯和YY的暑假实习,腾讯的失败了,YY的成功了.面试中我总会遇到自己不懂的,所幸的是不懂的越来越少,自己也一步一脚印得攻克自己不懂的.此时六月份的我再回顾起来, ...

  7. JS面向对象一

    面向对象分为三大类 封装,继承,多态! 封装就是在一个函数方法中嵌套另外一个函数方法,外层函数方法返回内层函数方法里面的结果,其中内层函数要调用外层函数定义的局部变量 每个函数方法就是一个局部作用域, ...

  8. AngularJs学习笔记0——前言

    距离上次写博客有很长时间了,这段时间中也一直想坚持写博客,但是迟迟未动,一方面是因为刚换工作并适应新的环境导致工作比较忙碌,一直没有抽出时间来,其实说白了就是给自己的懒惰找借口,但是本人在园子里也有一 ...

  9. Android端恶意锁屏勒索应用分析

    一.前言 5月12日,一场全球性互联网灾难悄然而至,一款名为WannaCRY的PC端恶意勒索软件利用NSA泄漏的危险漏洞“永恒之蓝”,给100多个国家和地区10万台电脑造成了巨大的损失.到2017年为 ...

  10. HDOJ 1260 DP

    Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...