跨页面通信方式
1. 父子页面通信
父子页面有两种,iframe嵌套的和window.open打开的。window.open打开的页面,在窗口模式时,被打开的页面就是当前页面的子页面,
tab模式时,只是形式不一样,也是子页面,可以通过window.opener来访问父页面。
iframe的通信方式: window.name, window.hash, postMessage
window.open的通信方式: postMessage
其中postMessage通信是最简单实现双向通信的方式。
2. 同域页面通信
非父子页面,同域通信可用方式
1. LocalStorage 监听storage事件,全兼容
2. BroadcastChannel chrome 54+ safari 15.4+
3. SharedWorker chrome 5+ safari 16+ SharedWorker 是一个在后台运行的线程,会在没有连接的标签页时继续存在,而 BroadcastChannel 只在有连接的标签页时才有 效, SharedWorker 可用来共享状态,所有页面可共用一个状态
3. 跨域页面通信
两个同域的独立页面通信可以使用localStorage,兄弟页面监听storage事件就行了。
两个跨域的独立页面可以使用一个birdge页面当做桥梁,做同域通信,两个页面分别用iframe嵌套它,用postMessage做跨域通信,就实现了两个跨域页面的通信。
具体如下图
postMessage storage postMessage
tab A <-------------------> iframe A [birdge.html] <-------------> iframe B [birdge.html] <------------------> tab B
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2018-09-17 React Render Callback Pattern(渲染回调模式)
2018-09-17 javascript实现deepEqual和shallowEqual
2018-09-17 React生命周期的变化
2018-09-17 ES6 Set,WeakSet,Map,WeakMap
2018-09-17 ES6装饰器Decorator基本用法
2018-09-17 Object.defineProperty基本用法