2010-03-04 16 views
195

He cargado una URL externa en mi WebView. Ahora lo que necesito es que cuando el usuario haga clic en los enlaces en la página cargada, tenga que funcionar como un navegador normal y abra el enlace en el mismo WebView. ¿Pero está abriendo el navegador predeterminado y cargando la página allí?Al hacer clic en las URL se abre el navegador predeterminado

He habilitado JavaScript. Pero aún así no está funcionando. ¿He olvidado algo?

Respuesta

339

Si está utilizando un WebView tendrá que interceptar los clics usted mismo si no desea el comportamiento predeterminado de Android.

Puede supervisar eventos en un WebView usando un WebViewClient. El método que desea es shouldOverrideUrlLoading(). Esto le permite realizar su propia acción cuando se selecciona una URL en particular.

Configura el WebViewClient de su WebView usando el setWebViewClient() method.

Si mira el WebView sample in the SDK, hay un ejemplo que hace justo lo que usted desea. Es tan simple como:

private class HelloWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 
} 
+87

Parece que este es el comportamiento por defecto para 'WebViewClient' y no necesita de subclases si esto es todo lo que está haciendo. Lo hice funcionar simplemente haciendo 'myWebView.setWebViewClient (new WebViewClient());' – Adam

+7

@ dave-webb por favor actualice la muestra para no llamar a loadUrl. Todos los que lean esto: no repliquen el código (devuelven falso de la devolución de llamada en lugar de llamar a view.loadUrl). Llamar a loadUrl introduce un error sutil donde si tienes cualquier iframe dentro de la página con un esquema personalizado URL (digamos