原文地址: https://juejin.im/post/6844903811232825357
以下仅供自己实践时做的笔记
一个页面发送
另一个页面接收:
监听 locaStorage
使用 eventListener 监听 storage
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> 这里是服务端渲染的文件 <div onclick="clickButton()">点击发送消息</div> </body> <script> window.addEventListener("storage", (e) => { console.log("这里storage进行了变化", e); }); let num = 0; function clickButton() { localStorage.setItem("nice", num++); } </script> </html> 使用 indexDB 然后进行轮训使用 serviceWorker 自己制作一个信息中转站。使用 postMessage 和 iframe 进行跨域传输数据。 需要注意的是: 不能把 targetWindow.postMessage 直接写在script标签内,因为 iframe 标签加载很慢,所以会报错 因此,要放在事件里面,通过事件触发。这样等到 iframe 加载完成后可以获得 iframe 的 window ,然后发送消息。
或者可以用setTimeout
parent 页面,挂载载 http://localhost:3000 上
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>iframe父级页面</title> <style> * { padding: 0; margin: 0; } </style> </head> <body> <h2>我是父级页面</h2> <iframe src="http://localhost:3001" id="myframe"></iframe> <script> setTimeout(() => { var myframe = document.getElementById("myframe"); myframe.contentWindow.postMessage("hello", "http://localhost:3001"); }, 1000); </script> </body> </html>child子页面,挂载在 http://localhost:3001 上
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>iframe子页面</title> </head> <body> <h2>我是内嵌的子页面</h2> <script> window.addEventListener("message", function (e) { console.log("这里是父页面传的值:", e.data); }); </script> </body> </html>