Мне интересно, что произойдет, когда пользователь закроет вкладку, которая породила рабочий поток, пока поток все еще работает. Он все останавливает? Если да, существует ли способ запустить поток в фоновом режиме, даже когда вкладка закрыта?
Что происходит с потоком веб-рабочего HTML5, когда вкладка закрыта во время ее работы?
Ответ 1
Да, он останавливает все, работник не может пережить своего владельца. Если вы используете общий рабочий, у которого может быть несколько владельцев, рабочий останется только в живых, если жив хотя бы один владелец. Это так, даже если вы передадите запутанное MessagePort
в другое окно (т.е. Владелец порта сообщения не является владельцем рабочего).
Итак, с общими рабочими вы можете "передать" собственность, открыв новое окно, которое устанавливает свое собственное соединение с работником (с new SharedWorker(...)
), а затем закроет старое окно. Но одно окно должно всегда оставаться открытым.
Ответ 2
Взгляните сюда
http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#workerglobalscope
I think подтверждает, что как только браузер уходит, все работники должны остановиться.
Всякий раз, когда объект документа отбрасывается, его необходимо удалить из список работника Документы каждого работника, чей список содержит Документ.
В случае, когда у вас есть одно окно с использованием веб-работников, и вы закрываете это окно (или вкладку), рабочий уходит.
Если у вас есть случай, когда у вас есть окно, которое открывает другие окна или вкладки, рабочие могут продолжать. Но если вы закрываете все, они все уходят.