摘要

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. bootstrap之daterangepicker---汉化以及扩展

    一.扩展的功能 1.初始化时,会自动创建一个select标签: 2.当改变select值时,日期也会自动改变,并且会调用apply按钮的click事件 3.点击此处进行预览 4.github地址:ht ...

  2. angular嵌入注入服务实例

    <!DOCTYPE html> <html lang="en" ng-app="myapp"> <head> <met ...

  3. java书系列之——前言

    第1章Java的起源 对于计算机语言的发展史,业界一般认为:B语言导致了C语言的诞生,C语言演变出了C++语言,而C++语言将让位于Java语言.要想更好地了解Java语言,就必须了解它产生的原因.推 ...

  4. JVM高级特性-二、JVM在堆中对象的分配、布局、访问过程

    前面介绍了jvm运行时数据区域后,下面讲解下对内存中数据的其他细节,看他们是如何创建.布局及访问的 一.对象的创建 1.对象的分配 对象的创建分配方式主要有两种:指针碰撞和空闲列表 指针碰撞: 假设堆 ...

  5. windows环境下使用virtualenv对python进行多版本隔离

    最近在用python做一个文本的情感分析的项目,用到tensorflow,需要用python3的版本,之前因为<机器学习实战>那本书的缘故,用的是python2.7.所以目前的情况是要两个 ...

  6. android下的名词/片段解释

    关于建项目时候SDK解释 minimum required SDK: 又为miniSdk, 是你程序最低支持的SDK版本,这个现在一般miniSDK设定一般为8或者10 Target SDK:是你程序 ...

  7. 不小心用js重做了一遍贪吃蛇

    贪吃蛇游戏想必没人会感到陌生,这个游戏的js版本在网上也是一搜一大把,今天我要介绍的仍然是如何用js做一个贪吃蛇游戏,但在关键一步,蛇的运动的实现上略有不同. 贪吃蛇的js版本通常用连续的方块元素来实 ...

  8. SICP-1.6-高阶函数

    高阶函数 将函数作为参数 例如 def sum_naturals(n): total, k = 0, 1 while k <= n: total, k = total + k, k + 1 re ...

  9. SQL 调用存储过程

    --1调用存储过程 exec 存储过程名 参数 --2当表使用 select a.*,b.* from tb b inner join ( select * from openrowset('sqlo ...

  10. java hascode

    有部分代码如下: Cat cat=new Cat("Kitty",2);system.out.println(cat):问题:输出什么? 调用并执行toString()方法,两种情 ...