У меня возникла любопытная проблема, связанная со спецификацией c комбинации (a) приложения iOS (в 13.3.1), которое (b) использует WKWebView для отображения содержимого, встроенного в приложение, включая (c) веб-воркер, который (d) создает веб-воркер.
Когда приложение выходит из фона / сна, WKWebView (или iOS), похоже, завершает работу веб-воркера. На вкладке "Ресурсы" в представлении "Разработка" из destop Safari рабочий обычно больше не отображается. Иногда он все еще присутствует, но Safari не может загрузить его содержимое, если оно выбрано в списке.
Не влияет на почти идентичный веб-воркер, который использует HTTP-соединения, а не соединения через websocket. Не влияет на мобильный Safari, отображающий почти идентичный веб-контент. Кажется, что это влияет только на определенные c комбинации a, b, c, d, перечисленные выше.
Насколько я могу судить, происходит следующее:
- Когда приложение выходит из спящего режима, просроченный setInterval () немедленно запускается в веб-воркере.
- Этот код пытается отправить существующий веб-сокет
- Состояние готовности веб-сокета отображается как 1 (открыто )
- Но при отправке возникает ошибка (из-за разрыва соединения)
- И веб-воркер завершается
Среди проблем есть проверка приложения. Использование разработки в Safari для настольных ПК увеличивает нестабильность. При нормальном использовании вход и выход из iOS App Switcher не вызывает проблем. Но когда настольный Safari проверяет приложение, переход в Switcher и повторный выбор приложения также приводит к завершению работы веб-воркера.
Кто-нибудь знает, что здесь происходит?
I Мне интересно, скорее умозрительно, если это ошибка в 13.3 и, возможно, конкретно связана с Почему я получаю предупреждение консоли: [Process] kill () вернул неожиданную ошибку 1, когда я загружаю WKWebView в iOS13.2? , что, по-видимому, исправлено в 13.4. Но я хочу решить проблему, не полагаясь на обновление iOS.
У меня есть обходной путь в виде отправки пульса от рабочего и воссоздания рабочего, если пульс dry увеличивается, но Я бы предпочел, чтобы рабочий вообще не взорвался.