Прекращение работы веб-воркера в приложении iOS с использованием WKWebView, веб-воркера и веб-сокета - PullRequest
0 голосов
/ 05 мая 2020

У меня возникла любопытная проблема, связанная со спецификацией 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 увеличивается, но Я бы предпочел, чтобы рабочий вообще не взорвался.

...