簡體   English   中英

javascript:在所有選項卡中運行一次代碼

[英]javascript: run code once among all tabs

每次頁面收到​​ websocket 事件時,都會播放通知聲音。 問題是如果用戶打開了其中的 10 個選項卡,則所有 10 個選項卡都會播放聲音。

那么有沒有辦法只在所有選項卡中運行此代碼一次,而無需修改服務器端代碼?

socket.on('notification', function(){
  playSound(); // this will run on every tab, which is annoying
});

這個關於選項卡之間通信問題的答案可能是一個好的開始。

一旦您在選項卡之間建立了可靠的通信方式,您就可以將一個選項卡指定為“領導者”並僅在該選項卡中播放聲音。 如果領導者死亡,剩下的人可以協商選舉新的領導者。 例如,你可以給每個標簽一個長的隨機 id,id 最低的可以成為新的“領導者”並承擔播放聲音的責任。

我花了很多時間開發一個處理這個的庫,它非常小,你可以像這樣鎖定:

//locked "critical section" code - runs only once
TabUtils.CallOnce("lockname", function () {
    alert("I run only once in multiple tabs");
});

https://github.com/jitbit/TabUtils

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM