Javascript SharedWorker неправильно взаимодействует с основной программой
Я работал с объектами Worker раньше, и это довольно просто, особенно с учебником.
Естественно, следующим шагом будет работа с SharedWorkers. Я получил его, но теперь кажется, что SharedWorker не отвечает правильно. Я отправляю сообщение postMessage в SharedWorker, и в моем коде SharedWorker отправляет обратно тот же текст, что-то вроде эффекта эха.
К сожалению, SharedWorker возвращает только первую букву сообщения, отправленного из основной программы, и не записывает на консоль строку "Background", чтобы сообщить мне, что SharedWorker запущен. Также сообщение журнала "Установка завершена" подтверждает, что SharedWorker был создан.
Код...
Основной файл HTML...
<html>
<head>
<title>Test</title>
</head>
<body>
<script>
var w = new SharedWorker('sharedworker.js');
w.port.start();
w.port.postMessage("start");
w.port.onmessage = function(e){
console.log(e.data);
};
console.log("Setup complete.");
</script>
</body>
</html>
Скрипт SharedWorker...
onconnect = function(e){
var port = e.ports[0];
port.addEventListener('message', function(e){
port.postMessage(e.data[0]);
});
port.start();
console.log("Background.");
}
Что я делаю неправильно?
1 ответ
К сожалению, SharedWorker возвращает только первую букву сообщения, отправленного из основной программы
Брось [0]
по ссылке на читаемую строку. В настоящее время он связывает строку как массив и возвращает только первый символ.
port.postMessage(e.data); // versus port.postMessage(e.data[0]);
и не регистрирует на консоли строку "Background", чтобы сообщить мне, что SharedWorker работает
Я не эксперт, но я сделаю предположение. (Я не вижу ничего очевидного в документации, подтверждающей это, и я сам раньше не использовал SharedWorkers.) С точки зрения мультиобработки, это то, что я ожидаю от SharedWorkers - контекст SharedWorker. полностью отделен, console
не существует в своем объеме.
В другом SO-потоке есть несколько полезных ответов относительно отладки, которые могут помочь вам в дальнейшей отладке: Как отлаживать веб-работников