Я провел некоторое тестирование, чтобы найти ответ на этот вопрос на практике.
Firefox пока не поддерживает создание подключений WebSocket из Web Workers: https://bugzilla.mozilla.org/show_bug.cgi?id=504553 Так что Firefox не имеет отношения к этой ошибке
IE 10 не поддерживает Shared Web Workers , поэтому это тоже не актуально.Таким образом, это оставляет Chrome.
Вот пример для тестирования общих веб-работников.
Сначала HTML:
<!DOCTYPE html>
<html>
<body>
<a href="shared.html">reload page</a>
<script>
var worker = new SharedWorker("shared.js");
worker.port.addEventListener("message", function(e) {
console.log("Got message: " + e.data);
}, false);
worker.port.start();
worker.port.postMessage("start");
</script>
</body>
</html>
Затем реализация самой совместной работы в shared.js
:
var connections = 0;
self.addEventListener("connect", function(e) {
var port = e.ports[0];
connections ++;
port.addEventListener("message", function(e) {
if (e.data === "start") {
var ws = new WebSocket("ws://localhost:6080");
port.postMessage("started connection: " + connections);
}
}, false);
port.start();
}, false);
Результаты теста в Chrome 20 ( ответ ):
Когда страница загружается одновременно на двух отдельных вкладках, число соединений увеличивается с каждымвремя перезагрузки одной из страниц или щелчка по ссылочной ссылке.
Если загружен только один экземпляр страницы, то число подключений никогда не изменяется при перезагрузке страницы или нажатии на ссылку.
Итак, в Chrome 20: Общие веб-работники не сохраняются при перезагрузках страницы и переходах по ссылкам навигации .