亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JS實(shí)現(xiàn)前端多標(biāo)簽頁(yè)通信BroadcastChannel

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

背景

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

那如何在多標(biāo)簽頁(yè)下進(jìn)行狀態(tài)的同步呢,這時(shí)候就要請(qǐng)出今天的“主人公”- BroadcastChannel。

來(lái)淺淺實(shí)踐一下

使用起來(lái)很簡(jiǎn)單。

<!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>

效果

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

注意

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

應(yīng)用

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

同步登錄狀態(tài)

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

// 登錄狀態(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īng)登錄狀態(tài)
authChannel.onmessage = (event) => {
  switch (event.data.type) {
    case 'LOGIN_SUCCESS':
      updateUserInfo(event.data.user);
      break;
    case 'LOGOUT':
      clearUserData();
      redirectToLogin();
      break;
  }
};

同步頁(yè)面設(shè)置

在多個(gè) AI 對(duì)話(huà)頁(yè)面場(chǎng)景下,在其中一個(gè)頁(yè)面上個(gè)更改了 LLM 對(duì)話(huà)參數(shù) Temperature 時(shí),其余頁(yè)面中相應(yīng)參數(shù)也會(huì)更改,避免后知后覺(jué)**。**

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

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

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

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

在多個(gè)頁(yè)面對(duì)比商品時(shí),在其中一個(gè)頁(yè)面中加購(gòu)商品后其余頁(yè)面也會(huì)更新購(gòu)物車(chē)列表,保證數(shù)據(jù)的一致性。

// 購(gòu)物車(chē)同步
const cartChannel = new BroadcastChannel('cart');

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

// 監(jiān)聽(tīng)購(gòu)物車(chē)變化
cartChannel.onmessage = (event) => {
  if (event.data.type === 'CART_UPDATE') {
    updateCartUI(event.data.cart);
  }
};

對(duì)比其他方案

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

總結(jié)

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

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

相關(guān)文章

  • BootStrap響應(yīng)式導(dǎo)航條實(shí)例介紹

    BootStrap響應(yīng)式導(dǎo)航條實(shí)例介紹

    響應(yīng)式導(dǎo)航條就是可以在不同的設(shè)備下查看不同的效果。這篇文章主要介紹了BootStrap響應(yīng)式導(dǎo)航條實(shí)例介紹的相關(guān)資料,小編認(rèn)為本文介紹的非常的不錯(cuò),特此分享給大家,供大家參考
    2016-05-05
  • js中關(guān)于一個(gè)分號(hào)的崩潰示例

    js中關(guān)于一個(gè)分號(hào)的崩潰示例

    下面的js代碼不管if條件的結(jié)果是true還是false都會(huì)執(zhí)行大括號(hào)的代碼,結(jié)果發(fā)現(xiàn)if條件括號(hào)后面多寫(xiě)了分號(hào),崩潰啊
    2013-11-11
  • js實(shí)現(xiàn)密碼強(qiáng)度檢測(cè)【附示例】

    js實(shí)現(xiàn)密碼強(qiáng)度檢測(cè)【附示例】

    下面小編就為大家?guī)?lái)一篇js實(shí)現(xiàn)密碼強(qiáng)度檢測(cè)【附示例】。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-03-03
  • Javascript 嚴(yán)格模式use strict詳解

    Javascript 嚴(yán)格模式use strict詳解

    嚴(yán)格模式:由ECMA-262規(guī)范定義的JavaScript標(biāo)準(zhǔn),對(duì)javascrip的限制更強(qiáng)。這篇文章主要介紹了Javascript 嚴(yán)格模式use strict詳解 ,需要的朋友可以參考下
    2017-09-09
  • 詳解Html a標(biāo)簽中href和onclick用法、區(qū)別、優(yōu)先級(jí)別

    詳解Html a標(biāo)簽中href和onclick用法、區(qū)別、優(yōu)先級(jí)別

    本文主要分享一篇關(guān)于Html A標(biāo)簽中href和onclick用法、區(qū)別、優(yōu)先級(jí)別,具有很好的參考價(jià)值,有需要了解的朋友可以看看
    2017-01-01
  • JS中toFixed(2)精度問(wèn)題的原因以及解決辦法

    JS中toFixed(2)精度問(wèn)題的原因以及解決辦法

    最近發(fā)現(xiàn)JS當(dāng)中toFixed()方法存在一些問(wèn)題,所以這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于JS中toFixed(2)精度問(wèn)題的原因以及解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • eslint 的三大通用規(guī)則詳解

    eslint 的三大通用規(guī)則詳解

    這篇文章主要介紹了eslint 的三大通用規(guī)則詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-05-05
  • js實(shí)現(xiàn)仿購(gòu)物車(chē)加減效果

    js實(shí)現(xiàn)仿購(gòu)物車(chē)加減效果

    本文主要介紹了js實(shí)現(xiàn)仿購(gòu)物車(chē)+ -效果的實(shí)例,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-03-03
  • js的offsetleft屬性的用法小結(jié)

    js的offsetleft屬性的用法小結(jié)

    本文主要介紹了js的offsetleft屬性的用法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • JavaScript數(shù)組的隨機(jī)排序方法詳解

    JavaScript數(shù)組的隨機(jī)排序方法詳解

    在前端開(kāi)發(fā)中,我們經(jīng)常需要對(duì)數(shù)組進(jìn)行隨機(jī)排序,例如在游戲、抽獎(jiǎng)、數(shù)據(jù)隨機(jī)展示等場(chǎng)景中,JavaScript 提供了多種方式來(lái)實(shí)現(xiàn)數(shù)組的隨機(jī)排序,本文將詳細(xì)介紹不同的方法,并分析它們的優(yōu)缺點(diǎn),幫助開(kāi)發(fā)者在不同場(chǎng)景下選擇合適的解決方案,需要的朋友可以參考下
    2025-03-03

最新評(píng)論