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

JS實現(xiàn)前端多標簽頁通信BroadcastChannel

 更新時間:2025年10月21日 10:01:35   作者:CC碼碼  
BroadcastChannel 是一種用于同源不同窗口/標簽頁間通信的 API,可解決多標簽頁狀態(tài)同步問題,通過創(chuàng)建頻道并監(jiān)聽消息,可實現(xiàn)登錄狀態(tài)、頁面設(shè)置、業(yè)務(wù)數(shù)據(jù)等實時同步,下面就來詳細的介紹一下,感興趣的可以了解一下

背景

日常使用一些網(wǎng)站過程中,會發(fā)現(xiàn)當(dāng)打開一個網(wǎng)站多個標簽頁時,當(dāng)在其中一個標簽頁頁面退出登錄時,在其他標簽頁中還可以繼續(xù)操作,這里就存在一個狀態(tài)沒有實時統(tǒng)一的問題;其后當(dāng)操作發(fā)送請求時根據(jù)后端的登錄校驗情況會跳轉(zhuǎn)到登錄頁,而這個操作滯后了。比如常用的 AI 網(wǎng)站 DeepSeek。

那如何在多標簽頁下進行狀態(tài)的同步呢,這時候就要請出今天的“主人公”- BroadcastChannel。

來淺淺實踐一下

使用起來很簡單。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>BroadcastChannel</title>
</head>
<body>
  <h1>BroadcastChannel</h1>
  <script>
    const channel = new BroadcastChannel('my-channel');
    channel.postMessage('hello world');

    channel.onmessage = (event) => {
      console.log(event.data);
    }
  </script>
</body>
</html>

效果

在兩個瀏覽器窗口中分別打開頁面,當(dāng)一個頁面刷新后發(fā)送消息時,之前打開的相同頁面收到了消息內(nèi)容,但是當(dāng)前頁面沒有收到消息內(nèi)容。

注意

  • 適用于同源不同瀏覽器窗口、瀏覽器標簽頁、iframe之間互相通信
  • 通過 message 事件進行廣播
  • 在監(jiān)聽該 channel 的所有 BroadcastChannel 對象上觸發(fā),但是不包含發(fā)送消息的對象

應(yīng)用

舉兩個業(yè)務(wù)中會用到的例子:

同步登錄狀態(tài)

當(dāng)多個頁面處于未登錄狀態(tài)時,在其中一個頁面上登錄成功后,所有的頁面都會收到消息,更新登錄狀態(tài)及頁面路由。

// 登錄狀態(tài)管理
const authChannel = new BroadcastChannel('auth');

// 登錄成功后
function handleLogin(user) {
  localStorage.setItem('token', user.token);
  authChannel.postMessage({
    type: 'LOGIN_SUCCESS',
    user: user
  });
}

// 監(jiān)聽登錄狀態(tài)
authChannel.onmessage = (event) => {
  switch (event.data.type) {
    case 'LOGIN_SUCCESS':
      updateUserInfo(event.data.user);
      break;
    case 'LOGOUT':
      clearUserData();
      redirectToLogin();
      break;
  }
};

同步頁面設(shè)置

在多個 AI 對話頁面場景下,在其中一個頁面上個更改了 LLM 對話參數(shù) Temperature 時,其余頁面中相應(yīng)參數(shù)也會更改,避免后知后覺**。**

// 應(yīng)用配置同步
const configChannel = new BroadcastChannel('app-config');

// 管理員更新配置
function updateAppSettings(settings) {
  configChannel.postMessage({
    type: 'SETTINGS_UPDATED',
    settings: settings
  });
}

// 所有頁面應(yīng)用新配置
configChannel.onmessage = (event) => {
  if (event.data.type === 'SETTINGS_UPDATED') {
    applyNewSettings(event.data.settings);
    showNotification('配置已更新');
  }
};

同步業(yè)務(wù)數(shù)據(jù)

在多個頁面對比商品時,在其中一個頁面中加購商品后其余頁面也會更新購物車列表,保證數(shù)據(jù)的一致性。

// 購物車同步
const cartChannel = new BroadcastChannel('cart');

// 添加商品時通知其他標簽頁
function addToCart(product) {
  const cart = getCartFromStorage();
  cart.push(product);
  localStorage.setItem('cart', JSON.stringify(cart));
  
  cartChannel.postMessage({
    type: 'CART_UPDATE',
    cart: cart
  });
}

// 監(jiān)聽購物車變化
cartChannel.onmessage = (event) => {
  if (event.data.type === 'CART_UPDATE') {
    updateCartUI(event.data.cart);
  }
};

對比其他方案

通信方式適用場景特點
BroadcastChannel同源標簽頁通信簡單易用,不支持跨域
LocalStorage 事件簡單數(shù)據(jù)同步兼容性好,數(shù)據(jù)大小限制
SharedWorker復(fù)雜數(shù)據(jù)共享功能強大,實現(xiàn)復(fù)雜
Window.postMessage跨域通信需要引用目標窗口

總結(jié)

BroadcastChannel 非常適用于同源頁面在多窗口、多標簽頁場景下的數(shù)據(jù)或狀態(tài)同步,做到保持相同頁面在同一時刻下數(shù)據(jù)的一致性。

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

相關(guān)文章

  • JavaScript實現(xiàn)拖拽網(wǎng)頁內(nèi)元素的方法

    JavaScript實現(xiàn)拖拽網(wǎng)頁內(nèi)元素的方法

    這篇文章主要介紹了JavaScript實現(xiàn)拖拽網(wǎng)頁內(nèi)元素的方法,以注釋形式較為詳細的分析了javascript事件監(jiān)聽、元素定位的相關(guān)技巧,并配有詳細的注釋以便于理解,需要的朋友可以參考下
    2015-04-04
  • 微信小程序通過js實現(xiàn)瀑布流布局詳解

    微信小程序通過js實現(xiàn)瀑布流布局詳解

    這篇文章主要介紹了微信小程序通過js實現(xiàn)瀑布流布局詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • BootStrap table使用方法分析

    BootStrap table使用方法分析

    這篇文章主要為大家詳細介紹了JS組件Bootstrap Table使用方法,具有一定的實用性和參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • PHP+jQuery+Ajax+Mysql如何實現(xiàn)發(fā)表心情功能

    PHP+jQuery+Ajax+Mysql如何實現(xiàn)發(fā)表心情功能

    這篇文章通過php+jquery+ajax+mysql相結(jié)合,實現(xiàn)當(dāng)用戶瀏覽網(wǎng)站文章或者是論壇帖子后,想表達自己瀏覽后的心情,發(fā)表自己的感受,很多網(wǎng)站都提供了用戶發(fā)表心情的功能,通過此功能可以很直觀的分析文章或者是論壇對瀏覽者的用戶體驗度
    2015-08-08
  • JavaScript Event學(xué)習(xí)補遺 addEventSimple

    JavaScript Event學(xué)習(xí)補遺 addEventSimple

    這里有個addEventSimple和removeEventSimple函數(shù),有時候需要不那么顯眼的事件處理程序的時候我就用這兩個函數(shù)注冊。
    2010-02-02
  • window.print打印指定div實例代碼

    window.print打印指定div實例代碼

    window.print可以打印網(wǎng)頁,但有時候我們只希望打印特定控件或內(nèi)容,怎么辦呢,請看下面的例子
    2013-12-12
  • JS面向?qū)ο蠡A(chǔ)講解(工廠模式、構(gòu)造函數(shù)模式、原型模式、混合模式、動態(tài)原型模式)

    JS面向?qū)ο蠡A(chǔ)講解(工廠模式、構(gòu)造函數(shù)模式、原型模式、混合模式、動態(tài)原型模式)

    這篇文章主要介紹了面向?qū)ο驤S基礎(chǔ)講解,工廠模式、構(gòu)造函數(shù)模式、原型模式、混合模式、動態(tài)原型模式,需要的朋友可以參考下
    2014-08-08
  • JavaScript獲取URL中參數(shù)值的四種方法

    JavaScript獲取URL中參數(shù)值的四種方法

    在前端開發(fā)中,處理URL參數(shù)是一個常見的任務(wù),尤其是在沒有框架支持的情況下,這篇文章主要介紹了JavaScript獲取URL中參數(shù)值的四種方法,需要的朋友可以參考下
    2025-04-04
  • 微信小程序開發(fā)問題之wx.previewImage

    微信小程序開發(fā)問題之wx.previewImage

    這篇文章主要給大家介紹了關(guān)于微信小程序開發(fā)問題之wx.previewImage的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • javascript圖片預(yù)加載完整實例

    javascript圖片預(yù)加載完整實例

    這篇文章主要介紹了javascript圖片預(yù)加載實現(xiàn)方法,以完整實例形式分析了JavaScript圖片預(yù)加載顯示的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-12-12

最新評論

麟游县| 沈阳市| 霸州市| 清河县| 佛教| 丹凤县| 义乌市| 镇安县| 勃利县| 理塘县| 伊金霍洛旗| 抚州市| 措美县| 阿荣旗| 芜湖市| 汝阳县| 蒲江县| 石泉县| 常宁市| 都江堰市| 法库县| 关岭| 丽水市| 衢州市| 财经| 连南| 军事| 永兴县| 桑植县| 藁城市| 乡宁县| 宝清县| 鄂伦春自治旗| 沅陵县| 洞口县| 清苑县| 西和县| 巴青县| 桃源县| 佛教| 广饶县|