当前位置: 首页 > news >正文

关于浏览器跨页面通信

浏览器跨页面通信现在大概有2种方法1.Broadcast Channel同源访问更加安全必须放在http服务器上才可通讯。主页面index.htmldivbutton onclickpostMessage(1)按钮1/buttonbutton onclickpostMessage(2)按钮2/buttonbutton onclickpostMessage(3)按钮3/buttonspan stylecolor:#000000;idtime等待刷新/span/divdiviframe stylewidth:600px;height:600px;src./frame.htmlframeborder0/iframe/divconstbroadcastnewBroadcastChannel(Broadcast);//订阅消息broadcast.onmessage(msg){console.log(主页面 onmessage:,msg.data);document.getElementById(time).innerHTMLmsg.data;}constpostMessage(msg){console.log(主页面 postMessage:,msg);broadcast.postMessage(msg)}内嵌页面 iframe.htmldiv idcontentstylewidth:500px;height:300px;background-color: pink;等待主页面广播button onclickrefreshTime()刷新主页面时间/button/divconstbroadcastnewBroadcastChannel(Broadcast);//订阅消息broadcast.onmessage(msg){console.log(内嵌页面 onmessage:,msg.data);document.getElementById(content).innerHTML/brmsg.data;}constpostMessage(msg){console.log(内嵌页面 postMessage:,msg);broadcast.postMessage(msg);}functionrefreshTime(){var datenewDate();postMessage(date.getHours():date.getMinutes():date.getSeconds());}2.window.postMessage可以跨域比如有两个页面父页面http://localhost:8080/message1.htmlhtmlheadmeta charsetutf-8title跨域父页面/titlemeta http-equivexpirescontent0/meta http-equivCache-Controlcontentno-cache//headbodydiv stylemargin-top:10px;;button onclickopenWindow();stylewidth:100px打开子页面/buttonbutton onclickopenIframe();stylewidth:100px打开iframe/button打开子页面或iframe任选一个br/input idsayvalue/button onclicksend();stylewidth:100px同源发送/buttonbutton onclicksend2();stylewidth:100px异源发送/buttonspan idcontent/span/diviframe idiframesrc/iframescript typetext/javascript//子页面var openner;//子页面 网址var urlhttp://localhost:8081;//监听消息window.addEventListener(message,(e){console.log(message1 收到消息,e);document.getElementById(content).innerHTMLe.databr/;})//同源发送constsend(){let msgdocument.getElementById(say).value;console.log(message1 发送同源消息,msg);window.postMessage(msg,location.origin);}//打开子页面constopenWindow(){console.log(打开子页面)opennerwindow.open(url/message2.html,_blank ,window)}//打开子页面constopenIframe(){console.log(打开子页面 iframe);opennerwindow.frames[0];document.getElementById(iframe).srcurl/postMessage2.html;}//异源发送constsend2(){if(openner){let msgdocument.getElementById(say).value;console.log(openner 发送异源消息,msg);openner.postMessage(msg,url);}else{console.log(请先打开跨域页面);}}/script/body/html子页面http://localhost:8081/message2.htmlhtmlheadmeta charsetutf-8title跨域子页面/titlemeta http-equivexpirescontent0/meta http-equivCache-Controlcontentno-cache//headbodydiv stylemargin-top:10px;;input idsayvalue/button onclicksend();stylewidth:100px同源发送/buttonbutton onclicksend2();stylewidth:100px异源发送/buttonbr/br/span idcontent/span/divscript typetext/javascriptvar urlhttp://localhost:8080;//监听消息window.addEventListener(message,(e){console.log(message2 收到消息,e);document.getElementById(content).innerHTMLe.databr/;})//同源发送constsend(){let msgdocument.getElementById(say).value;console.log(message2 发送同源消息,msg);window.postMessage(msg,location.origin);}//异源发送constsend2(){let msgdocument.getElementById(say).value;console.log(message2 发送异源消息,msg);//打开者或者 iframe父类let dadwindow.opener||window.parent;//如果url填写 *则发送的消息允许任何打开message2的父页面都可以监听到dad.postMessage(msg,url);}/script/body/htmljsonpJSONP是一种跨域数据请求的技术它通过动态创建script标签来实现请求。不安全。核心方法functionhandleJSONP(data){console.log(data);}var scriptdocument.createElement(script);//服务器返回时会根据callback参数创建一个名为handleJSONP这个的回调函数script.srchttps://example.com/api/data?callbackhandleJSONP;document.body.appendChild(script);完美展示jsonp(url,params){// 1 根据 url 和params 拼接请求地址url?for(let k in params){urlkparams[k]}// 2 拼接 callbackconstcallbackNameitcast(newDate()-0)urlcallbackcallbackName// 3 动态创建script标签constscriptdocument.createElement(script);script.typetext/javascript;returnnewPromise((resolve,reject){// 给window添加一个函数就相当于全局函数window[callbackName]function(data){// data 就是 JSONP接口返回的数据console.log(jsonp callback:,data);// 调用resolve获取数据resolve(data)// 删除掉添加给window的属性delete window[callbackName]// 移除 script 标签document.head.removeChild(script)}script.srcurl;document.head.appendChild(script);})}jsonp(url,{param:xx,}).then((res){console.log(res:,res);})
http://www.zskr.cn/news/1377236.html

相关文章:

  • 深度解析NucleusCoop:单机游戏本地分屏的技术实现与应用
  • ACE机器学习势函数与嵌套采样联用:攻克镁超高压相图预测难题
  • 西安二手包回收实测 各大品牌保值差距一目了然 - 奢侈品回收测评
  • 2026海城市黄金回收白银回收铂金回收店铺哪家好 实力靠谱门店排行榜推荐及联系方式 - 亦辰小黄鸭
  • inflect性能优化指南:处理大规模文本的高效语法转换策略
  • 3步掌握OBS多平台直播:obs-multi-rtmp从零到精通的完整攻略
  • Ventoy启动盘制作完整指南:告别繁琐格式化,体验多系统启动新境界
  • 鸣潮工具箱WaveTools:告别卡顿与低画质的终极游戏优化解决方案
  • OneBlog监控与日志:ELK集成与系统监控完整方案
  • 告别Rviz!纯Gazebo环境下用MoveIt控制机械臂完成抓取任务(Python脚本示例)
  • WMPFDebugger高级技巧:使用Protocol Monitor调试WebView和复杂场景的完整指南
  • ChatGPT生成的计划书通过PMP认证审核了吗?实测对比:AI生成 vs 人类专家,差距仅在第4.2.3条风险登记册
  • 深度解析企业级工业监控平台:7天构建现代化SCADA/HMI系统的技术架构与实战指南
  • NCMDump终极指南:3步解锁网易云NCM音乐格式转换
  • 2026海口市黄金回收白银回收铂金回收店铺哪家好 实力靠谱门店排行榜推荐及联系方式 - 亦辰小黄鸭
  • 如何用三步告别城通网盘限速?ctfileGet直连解析工具全解析
  • 集团型企业的知识产权管理:多主体架构与数据隔离
  • 2026年最新宁南县黄金回收白银回收铂金回收靠谱店铺权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 莘州文化
  • 2026年最新南部县黄金回收白银回收铂金回收靠谱店铺权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 莘州文化
  • 2026年最新木里藏族自治县黄金回收白银回收铂金回收靠谱店铺权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 莘州文化
  • 如何5分钟解锁全网无损音乐:洛雪音乐音源完整配置指南
  • 2026鞍山市黄金回收白银回收铂金回收店铺哪家好 实力靠谱门店排行榜推荐及联系方式 - 亦辰小黄鸭
  • 告别环境配置烦恼:5分钟搞定OpenCV 4.9.0 Android AAR包集成与QR码检测示例
  • XUnity.AutoTranslator:为Unity游戏注入多语言灵魂的智能翻译引擎
  • 全方位防护矿山开采三维透明化智能安全防控整体方案
  • NexoPOS vs 传统POS系统:为什么Web-based方案更具优势?[特殊字符]
  • 如何快速解锁QQ音乐加密格式:QMCDecode免费转换工具终极指南
  • 2026年最新南江县黄金回收白银回收铂金回收靠谱店铺权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 莘州文化
  • 端到端天基SAR系统设计
  • 3个实用技巧:零门槛批量下载抖音无水印视频