共享工作线程在重新加载页面时被终止。

4

为什么刷新页面后Shared Worker会死掉?它必须重新启动。如何解决这个问题?

刷新前

enter image description here

刷新后(在example.com上按F5)

enter image description here

父Worker

var port = new SharedWorker('/app/worker-5n1261e73b.js').port;
port.onmessage = function(e){
    console.log(e.data);
};
port.start();

worker-5n1261e73b.js

onconnect = function(e){
    var port = e.ports[0];
    port.onmessage = function(e){
         console.log(e.data);
    };
    port.start();
    port.postMessage('Connected');
};
1个回答

4

当页面重新加载时,JavaScript 将再次执行,并创建与您的 SharedWorker 的连接的代码也将执行。

在 Sharedworker 中,onconnect() 事件处理程序不知道标签页是重新加载还是全新的标签页,因此它只会将该标签页注册为一个新的已连接端口,并停止与先前标签页端口的通信(如果页面已重新加载)。换句话说,重新加载的页面会获得 Sharedworker 的新端口号。

如果在那个时候只有一个标签页打开,那么当重新加载页面时,Sharedworker 肯定会停止并重新创建,但是如果您在那个时候打开了多个页面,则由于其他活动的连接,Sharedworker 不会停止工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接