第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

【九月打卡】第15天 如何實(shí)現(xiàn)網(wǎng)頁多標(biāo)簽通訊?

標(biāo)簽:
面試

第一模块(课程信息):

课程名称:2周刷完100道前端优质面试真题
课程章节:第六章第二十一节 如何实现网页多标签通讯?
主讲老师:双越

第二模块(课程内容):

课程内容概述

1、使用websocket

  • 无跨域限制
  • 需要服务端支持,成本高

2、localStorage通讯

  • 同域的A和B两个页面
  • A页面设置localStorage
  • B页面可以监听到localStorage值的修改

3、使用SharedWorker通讯

  • SharedWorker是WebWorker的一种
  • WebWorker可开启子进程执行JS,但不能操作DOM
  • SharedWorker可单独开启一个进程,用于同域页面通讯

代码演示
封装SharedWorker

const set = new Set();
onconnect = event =>{
  const port = event.ports[0];
  set.add(port);
  // 接收消息
  port.onmessage = e =>{
    // 广播消息
    set.forEach(p=>{
      if(p===port) return;
      p.postMessage(e.data);
    })
  }
  // 发送消息
  port.postMessage('worker.js done');
}

使用方式:
list页面

const worker = new SharedWorker('./worker.js');
worker.port.onmessage = e =>console.log('list',e.data);

detail页面

const worker = new SharedWorker('./worker.js');
worker.port.postMessage('detail go...');

总结:

Websocket需要服务器端,成本高
localstorage简单易用,推荐
SharedWorker 调试不方便,不兼用IE11,只支持同域

拓展:网页和iframe如何通讯?

  • 使用postMessage通讯
  • 注意跨域的限制和判断

具体案例演示
主页面代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <p>
    index 页面
    <button id="btn1">发送消息</button>
  </p>
  <iframe id="iframe1" class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="./child.html" ></iframe>

  <script>
    const btn1 = document.getElementById('btn1');
    btn1.addEventListener('click',()=>{
      console.info('index clicked');
      window.iframe1.contentWindow.postMessage('hello','*');
    });

    window.addEventListener('message',event=>{
      console.info('origin',event.origin);//来源的域名
      console.info('index received',event.data);
    })
  </script>
</body>
</html>

iframe页面代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <p>
    child页面
    <button id="btn1">发送消息了</button>
  </p>

  <script>
    const btn1 = document.getElementById('btn1');
    btn1.addEventListener('click',()=>{
      console.info('child clicked');
      window.parent.postMessage('world',"*");
    })

    window.addEventListener('message',event=>{
      console.info('origin',event.origin);

      console.info('child received data',event.data);
    })
  </script>
</body>
</html>

运行结果如下:
图片描述

第三模块(学习心得):

1、通过这次学习掌握了不常用的SharedWorker通讯方式
2、掌握了iframe和页面之间的通讯
父页面向iframe页面:
window.#iframeId.contentWindow.postMessage(‘内容’,’’);*
iframe向父页面:
window.parent.postMessage(‘内容’,’’);*

第四模块(学习截图):

图片描述
图片描述
图片描述

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
Web前端工程師
手記
粉絲
11
獲贊與收藏
8

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報(bào)

0/150
提交
取消