最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript使用Broadcast?Channel實(shí)現(xiàn)前端跨標(biāo)簽頁通信

 更新時(shí)間:2024年04月22日 08:19:54   作者:MerkleJqueryRu  
這篇文章主要為大家詳細(xì)介紹了JavaScript如何使用Broadcast?Channel實(shí)現(xiàn)前端跨標(biāo)簽頁通信,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在開發(fā)Web應(yīng)用程序時(shí),有時(shí)候需要在不同的瀏覽器標(biāo)簽頁之間進(jìn)行通信。例如,你可能需要在一個(gè)標(biāo)簽頁中做出的更改在另一個(gè)標(biāo)簽頁中反映出來,或者需要在用戶在一個(gè)標(biāo)簽頁中執(zhí)行某些操作時(shí)向其他標(biāo)簽頁發(fā)送消息。為了實(shí)現(xiàn)這樣的跨標(biāo)簽頁通信,我們可以借助HTML5提供的Broadcast Channel API。

實(shí)現(xiàn)步驟

首先,我們需要創(chuàng)建兩個(gè)文件:一個(gè)HTML文件和一個(gè)JavaScript文件。

HTML文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript" src="./crossTabMsg.js"></script>
</head>
<body>
    <button id="btn">發(fā)送消息</button>
    <script type="text/javascript">
        var btn = document.getElementById('btn');
        btn.onclick = function() {
            sendMsg('test', 'hello');
        }
        listenMsg(function(msg) {
            console.log(msg);
        })
    </script>
</body>
</html>

JavaScript文件(crossTabMsg.js):

const channel = new BroadcastChannel('cross-tab-msg');

function sendMsg(type, msg) {
    channel.postMessage({type, msg});
}

function listenMsg(callback) {
    channel.addEventListener('message', e => {
        callback && callback(e.data);
    });
}

在HTML文件中,我們創(chuàng)建了一個(gè)按鈕,并為其添加了一個(gè)點(diǎn)擊事件處理程序。當(dāng)用戶點(diǎn)擊按鈕時(shí),我們調(diào)用sendMsg函數(shù)發(fā)送一條消息。同時(shí),我們也調(diào)用listenMsg函數(shù)來監(jiān)聽來自其他標(biāo)簽頁的消息,并在控制臺中打印出來。

在JavaScript文件中,我們創(chuàng)建了一個(gè)名為cross-tab-msg的新的Broadcast Channel,并定義了兩個(gè)函數(shù):sendMsg用于發(fā)送消息,listenMsg用于監(jiān)聽消息。當(dāng)收到消息時(shí),listenMsg函數(shù)會觸發(fā)回調(diào)函數(shù),并將接收到的消息作為參數(shù)傳遞給回調(diào)函數(shù)。

使用方法

要在不同的標(biāo)簽頁之間進(jìn)行通信,只需在這些標(biāo)簽頁中加載相同的HTML和JavaScript文件即可。當(dāng)你在一個(gè)標(biāo)簽頁中點(diǎn)擊按鈕發(fā)送消息時(shí),其他標(biāo)簽頁中的監(jiān)聽器將會接收到這條消息,并執(zhí)行相應(yīng)的操作。

結(jié)論

通過使用Broadcast Channel API,我們可以輕松地實(shí)現(xiàn)跨標(biāo)簽頁通信,使得不同標(biāo)簽頁之間可以方便地進(jìn)行消息傳遞和數(shù)據(jù)共享。這為開發(fā)復(fù)雜的Web應(yīng)用程序提供了更多的可能性和靈活性。

方法補(bǔ)充

除了上文的方法,小編還為大家整理了其他JavaScript跨標(biāo)簽頁通信的方法,希望對大家有所幫助

1.localstorage

<!-- 1.html -->
<script>
  if(!localStorage.getItem('a')){
		localStorage.setItem('a',1)
	}else{
		var sum = localStorage.getItem('a')
		localStorage.setItem('a', +sum + 1)
	}
</script>

<!-- 2.html  -->
<script>
  window.addEventListener('storage', (e) => console.log(e))
</script>
sessionStorage.setItem('message', '我是sessionStorage的值');
// 觸發(fā)自定義事件來通知其他標(biāo)簽頁
var event = new Event('sessionStorageUpdated');
window.dispatchEvent(event);
 
window.addEventListener('storage', function(event) {
  if (event.key === 'message') {
    var message = sessionStorage.getItem('message');
    console.log('message:', message);
  }
});
 
// 監(jiān)聽自定義事件來檢測 `sessionStorage` 的更新
window.addEventListener('sessionStorageUpdated', function() {
  var message = sessionStorage.getItem('message');
  console.log('message:', message);
});

2.postMessage

<!-- 1.html -->
<body>
    <button class="pop">彈出新窗口</button>
    <button class="button">發(fā)送數(shù)據(jù)</button>
    <script>
      const pop = document.querySelector('.pop');
      const button = document.querySelector('.button');

      let index = 0;
      let opener = null;

      pop.addEventListener('click', () => {
        opener = window.open(
          '2.html',
          '123',
          'height=600,width=600,top=20,resizeable=yes'
        );
      });

      button.addEventListener('click', () => {
        const data = {
          value: `moment ${index++}`,
        };

        opener.postMessage(data, '*');
      });
    </script>
  </body>

  <!-- 2.html -->
  <body>
  <div>postMessage  2.html</div>
  <script>
    window.addEventListener("message", (e) => {
      console.log(e.data);
    });
  </script>
</body>

3.SharedWorker

<!-- a.html -->
<script>
  let index = 0;
  const worker = new SharedWorker("worker.js");

  setInterval(() => {
    worker.port.postMessage(`moment ${index++}`);
  }, 1000);
</script>

<!-- b.html -->
<script>
  const worker = new SharedWorker("worker.js");

  worker.port.start();
  setInterval(() => {
    worker.port.postMessage("php是世界上最好的語言");
  }, 1000);

  worker.port.onmessage = function (e) {
    if (e.data) {
      console.log(e.data);
    }
  };
</script>

創(chuàng)建一個(gè) worker.js 文件,并編寫以下代碼:

let data = "";

self.onconnect = (e) => {
  const port = e.ports[0];

  port.onmessage = function (e) {
    if (e.data === "php是世界上最好的語言") {
      port.postMessage(data);
      data = "";
    } else {
      data = e.data;
    }
  };
};

到此這篇關(guān)于JavaScript使用Broadcast Channel實(shí)現(xiàn)前端跨標(biāo)簽頁通信的文章就介紹到這了,更多相關(guān)JavaScript Broadcast Channel跨標(biāo)簽頁通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談?lì)愃朴?function(){}).call()的js語句

    淺談?lì)愃朴?function(){}).call()的js語句

    這篇文章主要介紹了淺談?lì)愃朴?function(){}).call()的js語句,的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • js實(shí)現(xiàn)緩沖運(yùn)動效果的方法

    js實(shí)現(xiàn)緩沖運(yùn)動效果的方法

    這篇文章主要介紹了js實(shí)現(xiàn)緩沖運(yùn)動效果的方法,涉及javascript操作元素運(yùn)動的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • layer彈出層中H5播放器全屏出錯(cuò)的解決方法

    layer彈出層中H5播放器全屏出錯(cuò)的解決方法

    本文主要介紹了layer彈出層中H5播放器全屏出錯(cuò)解決&屬性poster底圖占滿video的方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • 在微信小程序中使用圖表的方法示例

    在微信小程序中使用圖表的方法示例

    這篇文章主要介紹了在微信小程序中使用圖表的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 純JavaScript代碼實(shí)現(xiàn)文本比較工具

    純JavaScript代碼實(shí)現(xiàn)文本比較工具

    之前項(xiàng)目需求需要寫一個(gè)純js文本比較工具,在此小編把代碼分享在腳本之家平臺供大家參考
    2016-02-02
  • JavaScript 數(shù)組遍歷的五種方法

    JavaScript 數(shù)組遍歷的五種方法

    這篇文章主要介紹了JavaScript 數(shù)組遍歷的五種方法,幫助大家更好的理解和學(xué)習(xí)使用JavaScript,感興趣的朋友可以了解下
    2021-03-03
  • js實(shí)現(xiàn)簡單的可切換選項(xiàng)卡效果

    js實(shí)現(xiàn)簡單的可切換選項(xiàng)卡效果

    這篇文章主要介紹了js實(shí)現(xiàn)簡單的可切換選項(xiàng)卡效果的方法,涉及javascript操作css樣式實(shí)現(xiàn)切換選項(xiàng)卡的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 微信小程序vant?輸入框問題處理方案

    微信小程序vant?輸入框問題處理方案

    這篇文章主要介紹了微信小程序vant輸入框問題,本文給大家分享完美解決方案,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • JavaScript中document獲取元素方法示例詳解

    JavaScript中document獲取元素方法示例詳解

    這篇文章主要介紹了JavaScript中獲取頁面元素的幾種常用方法,分別是getElementById()、getElementsByClassName()、getElementsByTagName()、querySelector()和querySelectorAll(),每種方法都有其特點(diǎn)和適用場景,需要的朋友可以參考下
    2025-03-03
  • Json按某個(gè)鍵的值進(jìn)行排序

    Json按某個(gè)鍵的值進(jìn)行排序

    這篇文章主要介紹了json按某個(gè)鍵的值進(jìn)行排序的相關(guān)資料,代碼簡單易懂,非常不錯(cuò),需要的朋友可以參考下
    2016-12-12

最新評論

肇庆市| 合山市| 黎川县| 仁布县| 黄冈市| 福建省| 拜泉县| 固镇县| 江阴市| 东乡| 永仁县| 富顺县| 封丘县| 昭平县| 嘉兴市| 吐鲁番市| 滁州市| 疏勒县| 雷山县| 仙游县| 麻栗坡县| 仪陇县| 鄂尔多斯市| 克什克腾旗| 兴安盟| 丽江市| 夹江县| 原平市| 天门市| 天水市| 常德市| 凤翔县| 西丰县| 新干县| 开阳县| 泰宁县| 安西县| 兰考县| 靖西县| 霍城县| 顺昌县|