javascript:在所有标签中运行一次代码

时间:2017-06-24 20:58:35

标签: javascript html node.js websocket local-storage

每当页面收到websocket事件时,它都会播放通知声音。问题是如果用户打开了其中10个标签,则所有10个标签都会播放声音。

那么无论如何在所有选项卡中只运行一次代码而不修改服务器端代码?

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

2 个答案:

答案 0 :(得分:0)

This answer关于标签之间通信的问题可能是一个好的开始。

一旦您在标签之间有了一种可靠的通信方式,您就可以将一个标签指定为“领导者”,并仅在该标签中播放声音。如果领导者死亡,剩下的领导者可以协商选举新领导人。例如,您可以为每个标签提供一个长的随机ID,而具有最低ID的那个可以成为新的“领导者”并承担播放声音的责任。

答案 1 :(得分:0)

我花了很多时间来开发一个处理这个问题的库,它很小,您可以这样锁定:

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

https://github.com/jitbit/TabUtils