window.alert в рабочей нити
-
26-09-2019 - |
Вопрос
Если я поставлю окно. Алерт на клиент WebWorker, то фоновый работник останавливает работу. Почему это так?
То есть вызывающий абонент:
var worker = new Worker("worker.js");
// Watch for messages from the worker
worker.onmessage = function(e){
// The message from the client:
e.data
};
worker.postMessage("start");
Клиент (Working.js)
onmessage = function(e){
if ( e.data === "start" ) {
// Do some computation
done()
}
};
function done(){
alert('don'); // ===> This kills the worker.
// Send back the results to the parent page
postMessage("done");
}
Решение
Вы заметили оповещение замораживает двигатель JavaScript, пока пользователь нажимает пользователя.
Если вы не хотите, чтобы это заморозить, не используйте предупреждения.
Для отладки с Firebug:
console.log("bla bla bla");
Для не блокировки всплывающих окон:
Сделайте скрытый div с кнопкой OK на нем. Когда всплывающее окно будет показано. Поместите ведро видимы. Когда пользователь нажимает «ОК», скрыть его.
Я бы посоветовал вам не использовать всплывающие окна. Это также нарушает «рабочий поток» (что означает концентрацию пользователя) пользователя за экраном :)
Другие советы
Есть ли у веб-работника доступ к Window.Alert ... Я знаю, что веб-работники не получают доступа DOM ..
на работнике, почему бы не сделать
if (window && window.alert) {
// do your normal thing
}
else {
postMessage("no support for this");
}
Веб-работники позволяют запустить код JavaScript на заднем плане. Веб-работники не могут вызвать предупреждение () или подтверждать () функции.