日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JavaScript 如何實現(xiàn)同源通信

瀏覽:195日期:2023-09-29 16:47:44
目錄一、Broadcast Channel API 簡介二、Broadcast Channel API 應用場景2.1 實現(xiàn)同源頁面間數(shù)據同步2.2 在其它 Tab 頁面中監(jiān)測用戶操作三、Broadcast Channel API vs postMessage API四、總結五、參考資源一、Broadcast Channel API 簡介

Broadcast Channel API 可以實現(xiàn)同源下瀏覽器不同窗口、Tab 頁或者 iframe 下的瀏覽器上下文之間的簡單通訊。通過創(chuàng)建一個監(jiān)聽某個頻道下的 BroadcastChannel 對象,你可以接收發(fā)送給該頻道的所有消息。

JavaScript 如何實現(xiàn)同源通信

(圖片來源 —— https://developer.mozilla.org/zh-CN/docs/Web/API/Broadcast_Channel_API)

了解完 Broadcast Channel API 的作用之后,我們來看一下如何使用它:

// 創(chuàng)建一個用于廣播的通信通道const channel = new BroadcastChannel(’my_bus’);// 在my_bus上發(fā)送消息channel.postMessage(’大家好,我是阿寶哥’);// 監(jiān)聽my_bus通道上的消息channel.onmessage = function(e) { console.log(’已收到的消息:’, e.data);};// 關閉通道channel.close();

通過觀察以上示例,我們可以發(fā)現(xiàn) Broadcast Channel API 使用起來還是很簡單的。該 API 除了支持發(fā)送字符串之外,我們還可以發(fā)送其它對象,比如 Blob、File、ArrayBuffer、Array 等對象。另外,需要注意的是,在實際項目中,我們還要考慮它的兼容性:

JavaScript 如何實現(xiàn)同源通信

(圖片來源 —— https://caniuse.com/?search=Broadcast%20Channel%20API)

由上圖可知,在 IE 11 及以下的版本,是不支持 Broadcast Channel API,這時你就可以考慮使用現(xiàn)成的 broadcast-channel-polyfill 或者基于 localStorage 和 storage 事件來實現(xiàn)。

二、Broadcast Channel API 應用場景

利用 Broadcast Channel API,我們可以輕易地實現(xiàn)同源頁面間一對多的通信。該 API 的一些使用場景如下:

實現(xiàn)同源頁面間數(shù)據同步; 在其它 Tab 頁面中監(jiān)測用戶操作; 指導 worker 執(zhí)行一個后臺任務; 知道用戶何時登錄另一個 window/tab 中的帳戶。

為了讓大家能夠更好地掌握 Broadcast Channel API,阿寶哥以前面 2 個使用場景為例,來介紹一下該 API 的具體應用。

2.1 實現(xiàn)同源頁面間數(shù)據同步

html

<h3 id='title'>你好,</h3><input id='userName' placeholder='請輸入你的用戶名' />

JS

const bc = new BroadcastChannel('abao_channel');(() => { const title = document.querySelector('#title'); const userName = document.querySelector('#userName'); const setTitle = (userName) => { title.innerHTML = '你好,' + userName; }; bc.onmessage = (messageEvent) => { if (messageEvent.data === 'update_title') { setTitle(localStorage.getItem('title')); } }; if (localStorage.getItem('title')) { setTitle(localStorage.getItem('title')); } else { setTitle('請告訴我們你的用戶名'); } userName.onchange = (e) => { const inputValue = e.target.value; localStorage.setItem('title', inputValue); setTitle(inputValue); bc.postMessage('update_title'); };})();

在以上示例中,我們實現(xiàn)了同源頁面間的數(shù)據同步。當任何一個已打開的頁面中,輸入框的數(shù)據發(fā)生變化時,頁面中的 h3#title 元素的內容將會自動實現(xiàn)同步更新。

JavaScript 如何實現(xiàn)同源通信

2.2 在其它 Tab 頁面中監(jiān)測用戶操作

利用 Broadcast Channel API,除了可以實現(xiàn)同源頁面間的數(shù)據同步之外,我們還可以利用它來實現(xiàn)在其它 Tab 頁面中監(jiān)測用戶操作的功能。比如,當用戶在任何一個 Tab 中執(zhí)行退出操作后,其它已打開的 Tab 頁面也能夠自動實現(xiàn)退出,從而保證系統(tǒng)的安全性。

html

<h3 id='status'>當前狀態(tài):已登錄</h3><button onclick='logout()'>退出</button>

JS

const status = document.querySelector('#status');const logoutChannel = new BroadcastChannel('logout_channel');logoutChannel.onmessage = function (e) { if (e.data.cmd === 'logout') { doLogout(); }};function logout() { doLogout(); logoutChannel.postMessage({ cmd: 'logout', user: '阿寶哥' });}function doLogout() { status.innerText = '當前狀態(tài):已退出';}

在以上示例中,當用戶點擊退出按鈕后,當前頁面會執(zhí)行退出操作,同時會通過 logoutChannel 通知其它已打開的頁面執(zhí)行退出操作。

三、Broadcast Channel API vs postMessage API

與 postMessage() 不同的是,你不再需要維護對 iframe 或 worker 的引用才能與其進行通信:

const popup = window.open(’https://another-origin.com’, ...);popup.postMessage(’Sup popup!’, ’https://another-origin.com’);

Broadcast Channel API 只能用于實現(xiàn)同源下瀏覽器不同窗口、Tab 頁或者 iframe 下的瀏覽器上下文之間的簡單通訊。而 postMessage API 卻可用于實現(xiàn)不同源之間消息通信。由于保證消息來自同一來源,因此無需像以前那樣使用以下方法來驗證消息:

const iframe = document.querySelector(’iframe’);iframe.contentWindow.onmessage = function(e) { if (e.origin !== ’https://expected-origin.com’) { return; } e.source.postMessage(’Ack!’, e.origin);};四、總結

Broadcast Channel API 是一個非常簡單的 API,內部包含了跨上下文通訊的接口。在支持該 API 的瀏覽器中,我們可以利用該 API 輕松地實現(xiàn)同源頁面間的通信。而對于不支持該 API 的瀏覽器來說,我們就可以考慮使用 localStorage 和 storage 事件來解決同源頁面間通信的問題。

五、參考資源

MDN - Broadcast Channel APIBroadcastChannel API: A Message Bus for the Web

以上就是JavaScript 如何實現(xiàn)同源通信的詳細內容,更多關于JavaScript 同源通信的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品免费一区二区三区| 成人av二区| 国产毛片一区| 亚洲精品1区| 亚洲精品护士| 欧美极品一区二区三区| 久久精品国产久精国产| 欧美亚洲专区| 四虎成人av| 欧美精品一区二区三区精品| av不卡免费看| 日韩三级精品| 成人精品久久| 在线精品一区二区| 精品网站999| 免费国产自久久久久三四区久久| 亚洲小说春色综合另类电影| 欧美色综合网| 不卡中文一二三区| 国产精品xxx在线观看| 一区免费在线| 精品国产中文字幕第一页| 在线亚洲国产精品网站| 国产一区三区在线播放| 日韩一区二区三免费高清在线观看| 国产suv精品一区| 人在线成免费视频| 98精品久久久久久久| 欧美丝袜一区| 国产精品亚洲成在人线| 国产视频一区三区| 日韩av网站在线免费观看| 一区视频在线| 国产精品多人| 蜜桃久久精品一区二区| 久久的色偷偷| 久久国产精品99国产| 国产99在线| 日韩有吗在线观看| 国产综合婷婷| 91成人精品观看| 亚洲欧美久久久| 毛片不卡一区二区| 欧美在线资源| 日韩大片免费观看| 日韩综合一区二区| 亚洲福利久久| 国产精品tv| 亚洲自拍另类| 午夜精品亚洲| 高清av一区| 亚洲精品高潮| 99久久夜色精品国产亚洲狼| 91精品福利观看| 亚洲成人日韩| 欧美日韩夜夜| 国产字幕视频一区二区| 精品午夜视频| 国产手机视频一区二区| 国产精品不卡| 九九精品调教| 中文字幕色婷婷在线视频| 亚洲精品免费观看| 日韩精品一区二区三区免费视频| 成人免费网站www网站高清| 日本va欧美va精品| 一本色道精品久久一区二区三区| 高清av一区| 久久成人高清| 欧美91视频| av中文资源在线资源免费观看| 国产精品羞羞答答在线观看| 视频一区二区三区入口| 国产欧美一区二区三区精品观看| 美女91精品| 久久久人人人| 欧美日韩视频网站| 欧美91在线| 国产视频一区二| 国产日本精品| 一区二区日韩免费看| 高清一区二区三区av| 成人三级高清视频在线看| 欧美成人精品午夜一区二区| 在线免费观看亚洲| 国产一区二区三区自拍| 一本大道色婷婷在线| 香蕉成人av| 国产在线日韩精品| 国产精品一区二区免费福利视频| 国产免费av国片精品草莓男男| 久久成人国产| 一区二区日韩免费看| 91精品国产自产在线观看永久∴| 精品国内亚洲2022精品成人| 色婷婷综合网| 国产专区精品| 成人高清一区| av综合电影网站| 国产精品精品| 九九在线精品| 超碰99在线| 日韩久久电影| 国产一区导航| 国产毛片久久| 天使萌一区二区三区免费观看| 亚洲精品电影| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲ww精品| 夜夜精品视频| 97精品国产一区二区三区| 国产白浆在线免费观看| 久久久久久婷| 久久激情网站| 五月天激情综合网| 美女精品在线观看| 欧美一区自拍| 国产精品宾馆| 国产日韩一区二区三区在线播放 | 六月天综合网| 日本亚州欧洲精品不卡| 国产精品黄网站| 亚洲黄色在线| 欧美日韩亚洲三区| 麻豆精品蜜桃| 成人污污视频| 久久一区二区三区喷水| 五月天激情综合网| 亚洲综合专区| 成人午夜在线| 色天使综合视频| 国产精久久一区二区| 国产麻豆久久| 另类亚洲自拍| 高清在线一区| 9国产精品视频| 亚洲欧洲av| 色婷婷亚洲mv天堂mv在影片| 亚洲一级影院| 美腿丝袜亚洲一区| 日韩国产一区二区三区| 婷婷综合五月| 精品入口麻豆88视频| 欧美手机在线| 精品中文在线| 欧美.日韩.国产.一区.二区| 日韩成人午夜精品| 99久久亚洲精品蜜臀| 日韩一区精品字幕| 另类综合日韩欧美亚洲| 亚洲黄色影院| 国产精品九九| 亚洲午夜国产成人| 精品国产麻豆| 综合激情婷婷| 韩国久久久久久| 免费观看日韩电影| 日韩精品2区| 亚洲va久久| 激情综合网址| 国产一区一一区高清不卡| 亚洲深爱激情| 久久精品网址| 999久久久亚洲| 男女男精品网站| 日韩在线视频一区二区三区| 亚洲精品日本| 亚洲激情欧美| 国产亚洲高清在线观看| 亚洲不卡系列| 欧美日韩国产高清| 国产精品一区2区3区| 亚洲精品在线二区| 国产精品对白| 免费精品视频最新在线| 国产福利91精品一区二区| 在线观看一区| 日本不良网站在线观看| 中文在线日韩| 免费一级欧美片在线观看网站| 福利一区二区三区视频在线观看| 久久中文字幕av| 蜜臀久久99精品久久久画质超高清| 国产精品videossex久久发布| 女人天堂亚洲aⅴ在线观看| 欧美aa在线视频| av成人国产| 久久精品欧美一区| 精品视频高潮| 美国欧美日韩国产在线播放| 麻豆精品蜜桃| 在线视频亚洲| 三级小说欧洲区亚洲区| 欧洲av一区二区| 亚洲精品免费观看| 亚洲精品小说| 亚洲欧美日韩综合国产aⅴ| 免费在线欧美黄色| 日韩高清中文字幕一区二区| 精品亚洲精品|