Я встраиваю карту Leaflet в приложение iOS с помощью WKWebView (BeeWare/Toga, но это кажется уровнем WebView, а не специфичным для платформы).
Проблема
Значок маркера Leaflet по умолчанию и тень периодически исчезают и отображаются как '?' заполнители.
Это происходит:
- После того, как приложение переведено в фоновый режим и возобновлено (теплый старт)
- И иногда даже при первом/холодном запуске
- Без ошибок консоли
- Без сетевых запросов (значки встроено - но проблема остается)
Подробности настройки
- Лифлет (стандартная сборка)
- Карта запускается в локальном HTML-файле, загруженном в WKWebView
- Значки встраиваются как URI данных Base64 PNG, а не извлекаются из диск или сеть
- Для маркерных ресурсов не используются относительные пути
Код: Выделить всё
// Executed before map creation
L.Icon.Default.mergeOptions({
iconUrl: 'data:image/png;base64,...',
iconRetinaUrl: 'data:image/png;base64,...',
shadowUrl: 'data:image/png;base64,...',
});
// Later
L.marker([lat, lng]).addTo(map);
Наблюдения
- При сбое и значок, и тень исчезают.
- Нет ошибки плитки, ошибки изображения или исключения JS
- Новый холодный запуск, кажется, решает проблему.
- Это похоже на проблему жизненного цикла или памяти WebKit / WKWebView, а не на проблему с путем листовки
- Проблемы разрешения относительных путей
- Отсутствуют ресурсы
- Проблемы с сетью/кешем
- CSS листовки не загружается
- Неправильные размеры значков или привязки
Вопрос
Кто-нибудь сталкивался с исчезновением значков маркеров Leaflet в WKWebView (особенно на iOS) даже при использовании значков data-URI?
В частности:
- Известна ли это проблема жизненного цикла изображения/очистки памяти WKWebView?
- Да существует канонический способ сделать значки маркеров Leaflet устойчивыми при переходах между фоновым и передним планом?
- Является ли явное размещение PNG-маркеров через HTTPS более надежным, чем встроенные ресурсы в этой среде?
- Существуют ли в WebKit ошибки или рекомендуемые шаблоны для сохранения работоспособности элементов DOM с поддержкой изображений во время приостановки приложения?
Подробнее здесь: https://stackoverflow.com/questions/798 ... iew-on-ios
Мобильная версия