实现目标:两个网站页面实现跨域相互通信
当前例子依赖于 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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
2009-10-18 数据源改变后,BarChart组件的运动效果.