Прежде всего: Вы все делаете правильно .
Недавно я заметил ту же проблему и провел некоторое исследование. Проблема не в вашем коде или React Native или react-native-webview
.
Это просто поведение по умолчанию для Android WebView
. Многие Java-разработчики сталкиваются с той же проблемой, примеры для связанных потоков на SO:
ошибка просмотра веб-страницы при загрузке страницы без интернета
Запретить WebView отображать «веб-страница недоступна»
Android WebView onReceivedError ()
Обычные предложения для обхода:
проверьте подключение к Интернету, прежде чем пытаться что-либо загрузить (предотвратить сбой)
быстро удалите содержимое ошибки и покажите свой собственный контент в onReceivedError
(который в основном соответствует вашему renderError
методу в react-native-webview
). Иногда с загрузкой локального URL, как в Java здесь .
позаботьтесь о том, чтобы наложение было удалено, если нет ошибок вообще. react-native-webview
делает это наоборот, показывая наложение при возникновении ошибки. Но наложение индикатора активности - хороший пример, он говорит, пока загрузка не закончилась или не обнаружена ошибка.
Насколько я знаю, мы ничего не можем поделать, кроме этих разочаровывающих способов, поскольку я предпочел бы не бороться с системой.
Редактировать : Firefox Focus для Android делает то же самое с быстрой заменой содержимого в обработчике ошибок.
Это сделано в Java в их источнике здесь:
https://github.com/mozilla-mobile/focus-android/blob/c789362b9c331b2036755a8398e3770be43b50b8/app/src/main/java/org/mozilla/focus/webview/FocusWebViewClient.java#L330
и
https://github.com/mozilla-mobile/focus-android/blob/63339d2d9a5d132bf4a1fffc4c46c0ce393abe87/app/src/main/java/org/mozilla/focus/webview/ErrorPage.java#L126.
Итак, я предполагаю, что мы в хорошей компании!
Редактировать 2 : Мне любопытно, действительно ли это видно, когда вы не находитесь в режиме отладки на реальном устройстве Android. Мое обоснованное предположение состоит в том, что код выполняется намного быстрее и его вообще не должно быть видно. Кстати, эта страница, вероятно, отображается только для 404 (не найдено) ошибок, которые маловероятны, если вы используете жестко закодированные URL-адреса и свои собственные серверы.
Редактировать 3 : Нативная страница ошибки является видимой, работающей на реальном устройстве в режиме выпуска. Единственный способ предотвратить это мерцание - создать наложение. Я открыл проблему, связанную с другой ошибкой, которая также решает эту проблему с react-native-webview
здесь https://github.com/react-native-community/react-native-webview/issues/474#issuecomment-487022106.