Удалить страницу ошибки Android по умолчанию при реагировании на собственное веб-представление - PullRequest
2 голосов
/ 03 апреля 2019

Я использую веб-просмотр в реагировать на родной язык, и я хочу отображать пользовательское сообщение об ошибке при возникновении какой-либо ошибки (например, нет подключения к Интернету).

Мой код:

<WebView 
  renderError={() => (
    <MissingConnection />
  )}
  other params....
/>

Когда при загрузке веб-страницы возникает ошибка, в течение доли секунды веб-просмотр отображает ошибку Android по умолчанию, например: enter image description here затем появляется мой MissingConnection компонент, скрывающий веб-просмотр.

Есть ли способ полностью удалить экран ошибки Android по умолчанию? Он мигает в течение доли секунды, и результат кажется неверным.

1 Ответ

1 голос
/ 05 апреля 2019

Прежде всего: Вы все делаете правильно .

Недавно я заметил ту же проблему и провел некоторое исследование. Проблема не в вашем коде или 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.

...