繁体   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