Impedir que WebView cargue la URL en Android (React Native)

Actualmente, OnShouldStartLoadWithRequest sólo es compatible con iOS. Un PR para agregar soporte para esto en Android fue cerrado. Si un WebView en Android intenta abrir un esquema de URL personalizado, se producirá un error en la aplicación, lo que está causando que mi aplicación se bloquee también.

La aplicación en la que estoy trabajando necesita interceptar un WebView que intenta abrir un esquema de URL personalizado y cancelarlo antes de abrir esa URL (que, en iOS, devolver false en OnShouldStartLoadWithRequest es una excelente manera de hacerlo).

¿Cuál es la mejor manera de hacer esto en Android?

Quiero que este código funcione:

  <WebView ref={WEBVIEW_REF} source={{uri: INITIAL_URI}} onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest} style={{width, height: height - navBarHeight, backgroundColor: "#fff"}} /> 

  onShouldStartLoadWithRequest(navigator) { if (navigator.url.indexOf(INTERCEPT_URL) === -1) { return true; } return false; } 

Estoy personalmente bien con prácticamente cualquier cosa que funcione – incluyendo modificar ReactWebViewManager.java manualmente. Sólo necesito sacar esto de la puerta.

Puede utilizar la propiedad onNavigationStateChange , que obtendrá el mismo objeto de navigator que obtenga en su función onShouldStartLoadWithRequest .

  <WebView ref={WEBVIEW_REF} source={{uri: INITIAL_URI}} onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest} //for iOS onNavigationStateChange ={this.onShouldStartLoadWithRequest} //for Android style={{width, height: height - navBarHeight, backgroundColor: "#fff"}} /> 

Y luego en la función

 onShouldStartLoadWithRequest(navigator) { if (navigator.url.indexOf(INTERCEPT_URL) === -1) { return true; } else { this.refs[WEBVIEW_REF].stopLoading(); //Some reference to your WebView to make it stop loading that URL return false; } } 

Tenía el mismo requisito que tú, y así lo he resuelto.

Si puede modificar el esquema, puede añadir el sufijo http a él para que WebViewManager no intente crear una intención con ese esquema e intente resolverlo.

Como probablemente vio en ReactWebViewManager

 public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("http://") || url.startsWith("https://")) { return } ... } 

Si la URL comienza con http, el administrador no lo tratará como un esquema. Sé que es una solución fea, pero bueno, hace el trabajo.

  • Reproducir video local en la vista web
  • Reducción inicial de zoom de Webview de Android
  • Maneje las teclas de flecha desde D-pad en la aplicación WebView de Google TV
  • Método recomendado para presentar texto con formato en Android?
  • Color del enlace de Android WebView
  • ¿Puedo obtener contenido de WebView con funciones de accesibilidad de android?
  • Android WebView: cómo gestionar los cambios de orientación
  • android webview setdefaultfontsize (tamaño int), ¿cuál es la unidad de tamaño?
  • Presentar contenido html como "páginas dinámicas"
  • Cómo reproducir URL de vídeo dentro de la vista web de Android
  • Vista de Android WebView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.