gpt4 book ai didi

JavaScript:如何知道与共享 worker 的连接是否仍然存在?

转载 作者:技术小花猫 更新时间:2023-10-29 11:52:59 25 4
gpt4 key购买 nike

我正在尝试使用共享 worker 来维护 Web 应用程序的所有窗口/选项卡的列表。因此使用以下代码:

//lives in shared-worker.js
var connections=[];//this represents the list of all windows/tabs
onconnect=function(e){
connections.push(e.ports[0]);
};

每次创建窗口时,都会与 shared-worker.js 建立连接worker 和 worker 将与窗口的连接添加到 connections列表。

当用户关闭一个窗口时,它与共享 worker 的连接就会过期,应该从 connections 中删除多变的。但我找不到任何可靠的方法来做到这一点。

查看 specification connections 的对象变量似乎没有属性/函数来检查连接是否仍然存在。

这可能吗?
同样,总体目标是获得所有窗口/选项卡的列表。

编辑:一种方法是让共享工作人员向窗口发送消息并期待回复。如果共享 worker 没有收到回复,那么它会认为窗口已关闭。在我的实验中,这种方法并不可靠;问题是无法判断窗口是否已关闭或只是需要很长时间才能回复。

最佳答案

这仅与 beforeunload 一样可靠,但似乎有效(在 Firefox 和 Chrome 中测试)。与轮询解决方案相比,我绝对更喜欢它。

// Tell the SharedWorker we're closing
addEventListener( 'beforeunload', function()
{
port.postMessage( {command:'closing'} );
});

然后在SharedWorker中处理端口对象的清理。

e.ports[0].onmessage = function( e )
{
const port = this,
data = e.data;

switch( data.command )
{
// Tab closed, remove port
case 'closing': myConnections.splice( myConnections.indexOf( port ), 1 );
break;
}
}

关于JavaScript:如何知道与共享 worker 的连接是否仍然存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13662089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com