const broadCastChannel = new BroadcastChannel('audio') function showAudio(){ //方式一:通过query,缺点会刷新已打开的页面,但并没有同源策略影响 window.open('/audio.html?name=张三&id=555','audio') }audio.html
// 堆代码 duidaima.com const app = document.getElementById('app') const query = new URLSearchParams(window.location.href.split('?')[1]) app.innerText = query.get('name')优点:每次打开,audio页面都会变为当前活动标签页
2.如果新打开的浏览上下文不共享相同的源[2],则打开脚本将无法与浏览上下文的内容进行交互(读取或写入)。
function showAudio(){ if(!localStorage.getItem('hasAudio')){ window.open('/audio.html','audio') localStorage.setItem('hasAudio',1) } setTimeout(()=>{ localStorage.setItem('name','李四') },3000) }audio.html
window.onunload = () =>{ localStorage.removeItem('hasAudio') localStorage.removeItem('name') } const app = document.getElementById('app') window.addEventListener('stroage',e=>{ const app = document.getElementById('app') app.innerText = e.newValue })优点:
2.同源页面需通过localStroage检控通信,控制麻烦,复杂场景使用不方便
const broadCastChannel = new BroadcastChannel('audio') function showAudio(){ if(!localStorage.getItem('hasAudio')){ window.open('/audio.html','audio') localStorage.setItem('hasAudio',1) } setTimeout(()=>{ broadCastChannel.postMessage({name:'李四'}) },3000) }audio.html
window.onunload = () =>{ localStorage.removeItem('hasAudio') } const app = document.getElementById('app') const broadCastChannel = new BroadcastChannel('audio') broadCastChannel.addEventListener('message',e=>{ const {name} = e.data const app = document.getElementById('app') app.innerText = name })优点: