Javascript 使用postMessage对iframe跨域传值或通信
实现目标:两个网站页面实现跨域相互通信
当前例子依赖于 jQuery 3.0
父页面代码:www.a.com/a.html
<iframe id="myIframe" src="http://www.b.com/b.html"></iframe> <script>
var $myIframe = $('#myIframe');
// 注意:必须是在框架内容加载完成后才能触发 message 事件哦
$myIframe.on('load', function(){
var data = {
act: 'article', // 自定义的消息类型、行为,用于switch条件判断等。。
msg: {
subject: '跨域通信消息收到了有木有~',
author: 'abcdefg'
}
};
// 不限制域名则填写 * 星号, 否则请填写对应域名如 http://www.b.com
$myIframe[0].contentWindow.postMessage(data, '*');
}); // 注册消息事件监听,对来自 myIframe 框架的消息进行处理
window.addEventListener('message', function(e){
if (e.data.act == 'response') {
alert(e.data.msg.answer);
} else {
alert('未定义的消息: '+ e.data.act);
}
}, false);
</script>
子页面代码:www.b.com/b.html
<script>
// 注册消息事件监听,对来自 myIframe 框架的消息进行处理
window.addEventListener('message', function(e){
if (e.data.act == 'article') {
alert(e.data.msg.subject);
// 向父窗框返回响应结果
window.parent.postMessage({
act: 'response',
msg: {
answer: '我接收到啦!'
}
}, '*');
} else {
alert('未定义的消息: '+ e.data.act);
}
}, false);
</script>
或子页面的 按钮直接触发:
//向父窗框返回结果
window.parent.postMessage({ act: 'response', msg: { answer: '我接收到啦3321!'} }, '*');
//********************************************************************************************************************************
方案二:
<script src="../js/layui/layui.js?v=12" charset="utf-8"></script>
<iframe id="myIframe" src="http://localhost:8633/WebForm2.aspx"></iframe>
<script>
layui.use(['form', 'layedit', 'laydate', 'upload', 'element'], function () {
var form = layui.form,
layer = layui.layer,
layedit = layui.layedit,
laydate = layui.laydate;
// 注册消息事件监听,对来自 myIframe 框架的消息进行处理
window.addEventListener('message', function(e){
if (e.data.act == 'response') {
alert(e.data.msg.answer);
parent.$('#series_name').val('我被改变了');
parent.layer.closeAll(); //疯狂模式,关闭所有层
} else {
alert('未定义的消息: '+ e.data.act);
}
}, false);
});
</script>
Javascript 使用postMessage对iframe跨域传值或通信的更多相关文章
- Javascript使用postMessage对iframe跨域通信
今天才发现原来有这么个好东西啊,跨域通信太方便了, 举个小栗子: 共两个页面, 页面1:www.a.com/a.html 页面2:www.b.com/b.html 实现目标:两个网站页面实现跨域相互通 ...
- postMessage解决iframe跨域问题
转:https://juejin.im/post/5b8359f351882542ba1dcc31 https://juejin.im/post/590c3983ac502e006531df11 ht ...
- iframe跨域数据传递
项目中需要和其他单位合作开发,方案采用iframe嵌入页面,开发过程中设计到了跨域数据的传递,初步方案决定使用html5 API postMessage进行iframe跨域数据传递: 域名A下的页面 ...
- 解决Iframe跨域高度自适应,利用window.postMessage()实现跨域消息传递页面高度(JavaScript)
在iframe跨域引用高度自适应这块写的js方式都试了不管用,最终使用的是window.postMessage() 跨域获取高度 传递信息 1.首先,在主页面上使用iframe引入子页面:也就是A.h ...
- javascript跨域、iframe跨域访问
1.window 对象 浏览器会在其打开一个 HTML 文档时创建一个对应的 window 对象.但是,如果一个文档定义了一个或多个框架(即,包含一个或多个 frame 或 iframe 标签),浏览 ...
- 【JavaScript】父子页面之间跨域通信的方法
由于同源策略的限制,JavaScript跨域的问题,一直是一个比较棘手的问题,为了解决页面之间的跨域通信,大家煞费苦心,研究了各种跨域方案.之前也有小网同学分享过一篇“跨域,不再纠结” 开始照着尝试时 ...
- js跨域传值,兼容ie8以上
js跨域传值,兼容ie8以上 事先说明,此方法并不支持ie8,如果想要支持ie8的话,需要用这种思路(来自微软): if (window.addEventListener) { window.addE ...
- js iframe跨域访问
1.什么是跨域? 2.前台解决跨域几种方法 2.1 动态创建script 2.2 使用document.domain 2.3使用HTML5新属性postMessage 2.4 利用iframe和loc ...
- 子页面iframe跨域执行父页面定义的JS方法
问题需求:父页面与子页面iframe跨域嵌套,子页面要触发父页面所定义的js方法.父子页面的数据传递. 下文中会用到一些文件:父页面: parent.html嵌在父页面的子iframe页面:child ...
随机推荐
- java基础知识—循环结构
1.while 循环 语法: while(循环操作){ 循环操作: } 特点:先判断,再执行:2. == : 用于数字比较 比较的是地址 equals: 用于字符串比较 比较的是字符 3.do-whi ...
- python复习购物车程序
个人学习总结: 无他,唯手熟尔!多敲多练才是王道 python 第三课 元组的灵活运用&字符串的诸多操作 Program01 '''时间 2018年2月12日12:15:28目的 购物车程序 ...
- 20175224 2018-2019-2 《Java程序设计》第九周学习总结
教材学习内容总结 第11章 JDBC与MySOLz数据库 MySQL数据库管理系统,简称MySQL. 使用步骤: 启动MySQL数据库服务 器建立连接: 建立数据库: 创建表等操作. JDBC:为专门 ...
- UIMediaScanner从相册读取资源的功能
iPhone的照片上传到了iCloud,本地的照片就被压缩,每当你要查看这些照片的时候就需要下载,不然上传的图片就是缩略图. //图片多张选择 function select_album(max, c ...
- ORACLE取字段中的注释
select * from (SELECT 'comment on column '|| t.table_name||'.'||t.colUMN_NAME||' is '|| ''''||t1.COM ...
- [Paper][Link note]
http://ieeexplore.ieee.org/document/6974670/
- Redis高可用方案----Redis主从+Sentinel+Haproxy
安装环境 这里使用三台服务器,每台服务器上开启一个redis-server和redis-sentinel服务,redis-server端口为6379,redis-sentinel的端口为26379. ...
- 泊爷带你学go -- redis连接池的操作
package main import ( "common" "fmt" "proto" "strconv" " ...
- Galera Cluster——一种新型的高一致性MySQL集群架构
原文链接:https://www.sohu.com/a/147032902_505779,最近被分配定位mysql的问题,学习下. 1. 何谓Galera Cluster 何谓Galera Clust ...
- 按此格式写你的distributionUrl,可以直接用本地的gradle包
distributionUrl=file\:/C:/Users/shenliuyong/.gradle/wrapper/dists/gradle-2.10-all/a4w5fzrkeut1ox71xs ...