iOS: WKWebView не загружает локальные файлы JS сразу

Я загружаю два файла JS в метод WKWebView через loadHTMLstring. Сценарии встроены в приложение, поэтому вызов HTTP не выполняется. Первый скрипт загружается в тег head. Второй встроенный. Это для веб-плеера Lottie: https://github.com/LottieFiles/lottie-player . Итак, первый загружает lottie-player.js, тогда как второй загружает анимацию после элемента lottie-player.

Второй скрипт делает что-то похожее на:

const player = document.querySelector("lottie-player");

// or load via a Bodymovin JSON string/object
player.load(
  '{"v":"5.3.4","fr":30,"ip":0,"op":38,"w":315,"h":600,"nm":"new", ... }'
);

Все работает нормально (т.е. анимация загружается и воспроизводится). Проблема, с которой я столкнулся, заключается в том, что анимация становится видимой примерно через 1 секунду, поэтому WKWebView, похоже, не загружает сценарии сразу. Есть ли способ решить эту проблему? Я использую по умолчанию WKWebViewConfiguration.


person user246392    schedule 08.07.2020    source источник
comment
Не могли бы вы предоставить пример проекта, такого как проект игровой площадки xcode, возможно, где проблема воспроизводима?   -  person Rishabh Raghunath    schedule 11.07.2020
comment
К сожалению, проект немного сложен, чтобы предоставить образец прямо сейчас. WKWebView является потомком вертикального UIStackView, который затем является фоновым представлением для UICollectionView.   -  person user246392    schedule 12.07.2020


Ответы (1)


Инициализация WKWebView и первая загрузка выполняются медленно. Лучше инициализировать и загрузить WKWebView до загрузки контроллера представления, содержащего ваш WKWebView. Вы можете использовать приведенный ниже проект, чтобы проверить, как они достигли этого для справки, а также они провели сравнение времени, необходимого для загрузки.

https://github.com/bernikovich/WebViewWarmUper

Также надеемся, что загрузка анимации не займет много времени.

person Nandish    schedule 14.07.2020
comment
Спасибо. Я на самом деле реализовал что-то подобное прошлой ночью, и, похоже, сейчас это работает. - person user246392; 15.07.2020
comment
У меня проблемы с этим решением. Кажется, он работает нормально в 80% случаев. Иногда я получаю пустые экраны, даже если представления прогреваются и поддерживаются в общем объекте. Любая идея, почему это может происходить? - person user246392; 19.07.2020