首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript:获取BroadcastChannel订阅者计数

问Javascript:获取BroadcastChannel订阅者计数
EN

Stack Overflow用户
提问于 2020-08-08 08:56:53
回答 1查看 973关注 0票数 0

如何判断是否存在广播频道及其用户计数?

我们有一个产品链接,一些铬页标签正在订阅一个广播频道。想看看有多少人在听。

代码语言:javascript
复制
const bc = new window.BroadcastChannel('channel_name');

资源:

https://medium.com/javascript-in-plain-english/using-javascript-and-the-broadcast-channel-api-a3134739781d

Communication between tabs or windows

使用角型语言环境,它可能有一个库功能。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-08 09:51:49

没有内置的方法来获取通过同一个BroadcastChannel连接的活动端口的计数。

您可以自己设置一些东西,例如使用一些using方法,在这种方法中,所有端口都会响应,而请求者只需在给定的时间内计算响应,但这有点麻烦,使得所有事情都是异步的,实际上只使用LocalStorage进行计数似乎是最简单的方法。

您可以在localStorage中保存您将要打开的每个通道的当前计数。

在每个新连接之前,页面只需检查该值,因为它将在可以通过BroadcastChannel进行通信的上下文中共享。

代码语言:javascript
复制
const active_connections = localStorage[ channel_name ] || 0;

然后,当连接时,它只需更新该值。

代码语言:javascript
复制
if( active_connections < max_count ) {
  const channel = new BroadcastChannel( channel_name );
  localStorage[ channel_name ] = active_connections + 1;
}

当通道关闭时,最棘手的是减少这个计数。为此,您需要连接到beforeunload事件:

代码语言:javascript
复制
addEventListener( 'beforeunload', (evt) => {
  localStorage[ channel_name ] --;
} );

请注意,如果您的代码确实调用了channel.close(),那么您应该添加一行来更新其中的计数,并禁用在卸载之前的一行。

(您仍然可以以点击的方式运行,以确保计数仍然正确,例如,如果页面崩溃,卸载前可能不会触发)。

我应该指出,我不明白你为什么要做这样的事情,也许你的设计中有些东西是错的,你应该反复检查它,也许还会有一个新的问题)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63313526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档