婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > html5中sharedWorker實(shí)現(xiàn)多頁面通信的示例代碼

html5中sharedWorker實(shí)現(xiàn)多頁面通信的示例代碼

熱門標(biāo)簽:高德地圖標(biāo)注廁所 江西ai電銷機(jī)器人如何 地圖標(biāo)注沿海城市房?jī)r(jià) 西安金倫外呼系統(tǒng) 通遼地圖標(biāo)注app 智能語音電銷機(jī)器人客戶端 中國地圖標(biāo)注城市的 地圖標(biāo)注員工作內(nèi)容 威海語音外呼系統(tǒng)平臺(tái)

是這樣的,今天玩github,先是在沒有登錄瀏覽了一些頁面,然后在某一頁面進(jìn)行了登錄。這時(shí)再切換的其他頁面時(shí)就看到了下面的提示:

那么這是怎么做到的呢?我們可以想到,一種辦法是 localStorage,在某一個(gè)頁面登錄時(shí),修改localStorage 狀態(tài),其他頁面在顯示的時(shí)候,讀取最新的狀態(tài),然后顯示提示:

// 登錄的頁面
localStorage.setItem('login', true);

// 其他頁面
document.addEventListener("visibilitychange", function() {
	if (localStorage.setItem('login') === 'true') {
		alert('你已登錄,請(qǐng)刷新頁面');
	}
}

然而,github并沒有這么做,localStorage里也找不到相關(guān)的字段,一番查找之后,發(fā)現(xiàn)他們是用 sharedWorker 實(shí)現(xiàn)的。那我們就來了解下sharedworker

什么是sharedWorker

sharedWorker 顧名思義,是 worker 的一種,可以由所有同源的頁面共享。同Worker的api一樣,傳入js的url,就可以注冊(cè)一個(gè) sharedWorker 實(shí)例:

let myWorker = new SharedWorker('worker.js');

但是與普通 Worker 不同的是:
1 同一個(gè)js url 只會(huì)創(chuàng)建一個(gè) sharedWorker,其他頁面再使用同樣的url創(chuàng)建sharedWorker,會(huì)復(fù)用已創(chuàng)建的 worker,這個(gè)worker由那幾個(gè)頁面共享。
2 sharedWorker通過port來發(fā)送和接收消息

接下來,我們看一下具體是 worker 和頁面之間是如何發(fā)送和接收消息的。

messagePort

假設(shè)我們有兩個(gè)js,一個(gè)是跑在頁面里的 page.js,另一個(gè)是跑在 worker里的 worker.js。那么我們要在 page.js 里注冊(cè)一個(gè) sharedWorker,代碼如下:

// page.js
let myWorker = new SharedWorker('worker.js');
// page通過worker port發(fā)送消息
myWorker.port.postMessage('哼哼');
// page通過worker port接收消息
myWorker.port.onmessage = (e) => console.log(e.data);

// worker.js
onconnect= function(e) {
	const port = e.ports[0];
	port.postMessage('哈嘿');
	port.onmessage = (e) => {
		console.log(e.data);
	}
}

調(diào)試sharedWorker

在上面的例子中,我們?cè)趙orker中使用了console.log來打印來自頁面的message,那么到哪里可以看到打印的log呢?我們可以在瀏覽器地址欄里面輸入 `chrome://inspect,然后在側(cè)邊欄選中shared workers了,就可以看到瀏覽器,目前在運(yùn)行的所有worker。點(diǎn)擊inspect會(huì)打開一個(gè)開發(fā)者工具,然后就可以看到輸出的log了。

這里我們看到我們的worker名字是untitled,那是因?yàn)閟haredworker 構(gòu)造函數(shù)還支持傳入第二個(gè)參數(shù)作為名字:

let myWorker = new SharedWorker('worker.js', 'awesome worker');

多頁面發(fā)布消息

回到文章一開始的例子,我們前面實(shí)現(xiàn)了頁面和worker之間的通信,那么該如何讓worker向多個(gè)頁面發(fā)送消息呢?一個(gè)思路就是我們把port緩存起來,作為一個(gè)port pool,這樣當(dāng)我們需要向所有頁面廣播消息的時(shí)候,就可以遍歷port,然后發(fā)送消息:

// worker js
const portPool = [];
onconnect= function(e) {
	const port = e.ports[0];
	// 在connect時(shí)將 port添加到 portPool中
	portPool.push(port);
	port.postMessage('哈嘿');
	port.onmessage = (e) => {
		console.log(e.data);
	}
}

function boardcast(message) {
	portPool.forEach(port => {
		port.portMessage(port);
	})
}

這樣我們就基本實(shí)現(xiàn)了向多個(gè)頁面廣播消息的功能。

清除無效的port

上面的實(shí)現(xiàn)中有一個(gè)問題,就是在頁面關(guān)閉后,workerPool中的port并不會(huì)自動(dòng)清除,造成內(nèi)存的白白浪費(fèi)。我們可以在頁面關(guān)閉前通知shared worker頁面將要關(guān)閉,然后讓worker將無效的 messagePort 從 portPool 中移除。

// 頁面
window.onbeforeunload = () => {
  myWorker.port.postMessage('TO BE CLOSED');
};

// worker.js
const portPool = [];
onconnect = function(e) {
  var port = e.ports[0];
  portPool.push(port);
  port.onmessage = function(e) {
    console.log(e);
    if (e.data === 'TO BE CLOSED') {
      const index = ports.findIndex(p => p === port);
      portPool.splice(index, 1);
    }
    var workerResult = 'Result: ' + (e.data[0] * e.data[1]);
    port.postMessage(workerResult);
  }
}

function boardcast(message) {
	portPool.forEach(port => {
		port.portMessage(port);
	})
}

這樣,我們就實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的多頁面廣播的sharedWorker。我們可以用它來廣播一下時(shí)間:

setInterval(() => boardcast(Date.now()), 1000);

參考

https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker/SharedWorker
https://github.com/mdn/simple-shared-worker

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

標(biāo)簽:晉中 崇左 青海 河池 營口 眉山 北海 阜陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《html5中sharedWorker實(shí)現(xiàn)多頁面通信的示例代碼》,本文關(guān)鍵詞  html5,中,sharedWorker,實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《html5中sharedWorker實(shí)現(xiàn)多頁面通信的示例代碼》相關(guān)的同類信息!
  • 本頁收集關(guān)于html5中sharedWorker實(shí)現(xiàn)多頁面通信的示例代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美高清视频在线高清观看mv色露露十八| 欧美激情综合五月色丁香小说| 日韩在线播放一区二区| 国产精品欧美精品| 精品国产第一区二区三区观看体验 | 色成年激情久久综合| 激情综合网激情| 蜜桃久久久久久| 三级在线观看一区二区| 亚洲国产一区二区视频| 亚洲综合久久久久| 亚洲欧美电影院| 亚洲柠檬福利资源导航| 亚洲免费av网站| 一区二区三区四区精品在线视频| 国产精品国产三级国产aⅴ中文 | 成人动漫一区二区在线| 国产精品一区二区久久不卡| 91在线视频观看| 精品国产髙清在线看国产毛片| 亚洲一二三区不卡| 亚洲午夜精品久久久久久久久| 91福利社在线观看| 国产精品一区二区男女羞羞无遮挡| 2024国产精品视频| 国产精品亚洲综合一区在线观看| 亚洲欧美日韩在线| 91在线视频网址| 久久99精品国产麻豆婷婷洗澡| 精品国产a毛片| heyzo一本久久综合| 日本亚洲天堂网| 国产精品网站导航| 欧美日韩国产大片| 成人午夜电影小说| 老司机精品视频线观看86 | 国产福利一区二区三区视频在线| 欧美激情在线看| 精品国产一区二区三区av性色| 91麻豆国产在线观看| 天涯成人国产亚洲精品一区av| 欧美猛男超大videosgay| 国产乱理伦片在线观看夜一区| 欧美极品美女视频| 久久亚洲私人国产精品va媚药| 日韩精品中文字幕一区二区三区 | 精品电影一区二区三区| 欧美一区二区三区喷汁尤物| 6080国产精品一区二区| 欧美精品1区2区| 欧美疯狂性受xxxxx喷水图片| 欧美三日本三级三级在线播放| 色就色 综合激情| 91精品国产综合久久福利软件| 欧美一级视频精品观看| 国产亚洲成av人在线观看导航| 久久精品免视看| 尤物视频一区二区| 五月天一区二区| 国产99一区视频免费| 一本到三区不卡视频| 欧美一区二区三区在线电影| 精品国产乱码久久久久久久| 中文字幕亚洲成人| 青青青爽久久午夜综合久久午夜| 国产成人日日夜夜| 欧美日韩一级黄| xnxx国产精品| 日韩精品电影在线| 成人综合日日夜夜| 日韩精品一区二| 亚洲一区二区免费视频| 成人少妇影院yyyy| 欧美日韩在线播放一区| 国产偷国产偷亚洲高清人白洁| 亚洲综合成人网| 欧美亚洲禁片免费| 亚洲乱码中文字幕| 国产精品亚洲综合一区在线观看| 欧美日韩午夜在线| 亚洲自拍偷拍av| 欧洲人成人精品| 一区二区三区中文字幕电影| 国产精品一区三区| 精品成人一区二区三区| 亚洲另类在线制服丝袜| 色噜噜狠狠色综合欧洲selulu| 欧美v亚洲v综合ⅴ国产v| 日韩二区三区四区| 亚洲精品一区二区三区四区高清| 蜜桃视频在线观看一区| 国产午夜精品一区二区| 成人国产精品免费观看动漫| 中文字幕中文字幕在线一区| 99精品视频一区| 亚洲成av人综合在线观看| 欧美一区欧美二区| 国产一区二区在线电影| 国产亚洲精品超碰| 欧美酷刑日本凌虐凌虐| 国产精品天干天干在线综合| 欧洲在线/亚洲| 国产一区不卡在线| 日本美女一区二区| 亚洲国产精品人人做人人爽| 日韩欧美国产一区在线观看| 99精品视频在线播放观看| 午夜成人免费视频| 一级做a爱片久久| 日韩欧美一二三四区| 在线精品视频免费观看| av动漫一区二区| 久久99久久99精品免视看婷婷 | 精品国产髙清在线看国产毛片 | 美女免费视频一区二区| 中文字幕在线不卡一区| 国产夜色精品一区二区av| 欧美日韩1区2区| 欧美一区二区三区免费大片| 99久久综合狠狠综合久久| 狠狠色狠狠色合久久伊人| 狠狠色丁香婷综合久久| 美女精品一区二区| 亚洲欧美日韩一区| 亚洲国产精品人人做人人爽| 日韩免费看网站| 欧美国产精品一区| 亚洲欧美日韩综合aⅴ视频| 欧美国产禁国产网站cc| 26uuuu精品一区二区| 国产精品久久免费看| 亚洲欧美日韩国产手机在线| 一区二区在线观看视频在线观看| 国产精品久久久久影院色老大 | 91精品国产综合久久久久久久 | 欧美一区二区免费视频| 亚洲精品一区二区三区99| 精品国产免费一区二区三区四区 | 精品国精品自拍自在线| 国产日产欧美精品一区二区三区| 久久影院午夜论| 精品日本一线二线三线不卡| 26uuu国产日韩综合| 精品对白一区国产伦| 国产精品毛片高清在线完整版| 午夜精品久久久久久久久| 国产一区二区三区国产| 国产成人99久久亚洲综合精品| 国产精品一区二区久久精品爱涩 | 亚洲国产日韩综合久久精品| 国产一区二区三区精品欧美日韩一区二区三区| 婷婷久久综合九色国产成人| 国产成人av自拍| 久久在线免费观看| 极品瑜伽女神91| 欧美一区二区三区色| 秋霞午夜鲁丝一区二区老狼| 精品视频免费看| 午夜伊人狠狠久久| 精品视频一区二区三区免费| www亚洲一区| 蜜桃视频一区二区三区| 精品久久人人做人人爰| 美美哒免费高清在线观看视频一区二区| 色婷婷av久久久久久久| 国产精品嫩草99a| 成人高清视频免费观看| www精品美女久久久tv| 国产精品1024| 欧美日韩国产片| 免费观看一级特黄欧美大片| 538在线一区二区精品国产| 精品国产乱码久久久久久1区2区| 中文字幕免费不卡| 午夜精品影院在线观看| 欧美日韩一区三区四区| 蜜臀av国产精品久久久久| 亚洲一区二区免费视频| 欧美精品自拍偷拍动漫精品| 亚洲日本青草视频在线怡红院| 中文字幕av一区二区三区高 | 欧美三级乱人伦电影| 蜜臀va亚洲va欧美va天堂 | 成人精品免费视频| 日韩专区欧美专区| 欧美mv日韩mv亚洲| 国产一区二区电影| 五月激情六月综合| 免费成人av在线播放| 91精品国产综合久久久蜜臀粉嫩| 国产在线精品视频| 精品一区二区影视| 日韩美女视频19| 丁香婷婷综合网| 亚洲va国产va欧美va观看| 亚洲卡通动漫在线| 国产欧美日韩视频在线观看| 日韩精品一区国产麻豆| 91久久香蕉国产日韩欧美9色| 久久97超碰国产精品超碰|