我在项目中使用BroadcastChannel更改了新消息到达时的所有选项卡标题。 问题在于它仅适用于chrome和firefox。因此,我决定使用localStorage创建一个BroadcastChannel:
setInterval(function() {
// check new messages:
var title = localStorage.getItem('title');
if(title != null && title != 0){
document.title = document.title.replace(/\(\d+\)\s+/, "");
document.title='('+title+')' + " " + document.title;
}
localStorage.setItem("title", "0");
}, 100);
和带有Ajax的ajax将检查消息,如果有新消息:
localStorage.setItem("title", i);
问题是,它正在与某些添加(1)的选项卡一起工作,但有些却没有...我认为是因为它在所有选项卡都可以读取它之前将localStorage setItem title重置为0。有什么想法可以使它可用,直到所有选项卡都可以阅读?
答案 0 :(得分:2)
您应该使用每次调用setItem时都会触发的“存储”事件,而不是间隔读取本地存储。
对于真正适用于所有浏览器的BroadcastChannel,我建议https://github.com/pubkey/broadcast-channel