共享工作程序在重新加载页面时终止

时间:2015-03-07 09:52:55

标签: javascript reload web-worker

为什么共享工作人员在重新加载页面时死机?它一定是复活了。我该如何解决这个问题?

重新加载之前

enter image description here

重新加载后(在example.com上按F5)

enter image description here

父工作者

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

工人5n1261e73b.js

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

1 个答案:

答案 0 :(得分:1)

当页面重新加载时,javascript 会再次执行,创建与 SharedWorker 的连接的代码也是如此。

您的 Sharedworker 中的 onconnect() 事件处理程序不知道该选项卡是重新加载还是一个全新的选项卡,因此它只是将该选项卡注册为新的连接端口,从而停止与上一个选项卡端口(如果页面已重新加载)。换句话说,重新加载的页面为 Sharedworker 获得了一个新的端口号。

如果您当时只打开了一个选项卡,那么在重新加载页面时肯定会停止并重新创建 Sharedworker,但是如果您当时打开了多个页面,则 Sharedworker 不会因为另一个而停止工作实时连接。