Pregunta

He cargado una URL externa en mi WebView. Ahora lo que necesito es que cuando el usuario hace clic en los enlaces de la página cargada, tiene que funcionar como un navegador normal y abrir el enlace en la misma WebView. Pero ha de abrir el navegador por defecto y la carga de la página hay?

Me tiene habilitado JavaScript. Pero todavía no está funcionando. Me he olvidado algo?

¿Fue útil?

Solución

Si estás usando un WebView vas a tener que interceptar los clics a sí mismo si no quiere que el comportamiento por defecto de Android.

Se puede supervisar los eventos en un WebView utilizando un WebViewClient . El método que desea es shouldOverrideUrlLoading() . Esto le permite realizar su propia acción cuando se selecciona una URL concreta.

Se ajusta el WebViewClient de su WebView utilizando el método setWebViewClient() .

Si nos fijamos en la href="https://developer.android.com/guide/webapps/webview.html" rel="noreferrer"> muestra WebView en el SDK hay un ejemplo que hace exactamente lo que quiere. Es tan simple como:

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

Otros consejos

En algunos casos es posible que necesite un reemplazo de onLoadResource si se obtiene una redirección que no desencadenan el método de URL de carga. en este caso, he intentado lo siguiente:

@Override
public void onLoadResource(WebView view, String url)
{
    if (url.equals("http://redirectexample.com"))
    {
        //do your own thing here
    }
    else
    {
        super.onLoadResource(view, url);
    }           
}

dice, haga clic en un enlace en un WebView se Iniciar aplicación que gestiona las direcciones URL. Necesita anular este comportamiento predeterminado

    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });

o si no hay lógica condicional en el método simplemente hacer esto

myWebView.setWebViewClient(new WebViewClient());

Añadir este 2 líneas en el código -

mWebView.setWebChromeClient(new WebChromeClient()); 
mWebView.setWebViewClient(new WebViewClient());

El método boolean shouldOverrideUrlLoading(WebView view, String url) desfasada y en su API 24. Si da soporte a nuevos dispositivos que puedes usar boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request).

Se puede utilizar tanto por hacer algo como esto:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return true;
        }
    });
} else {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });
}

La respuesta de Arulx Z era exactamente lo que estaba buscando.

Estoy escribiendo una aplicación de navegación con Cajón con recyclerview y webviews, para mantener la navegación web dentro de la aplicación independientemente de hipervínculos hecho clic (por lo tanto no lanzar el navegador web externo). Para ello será suficiente para poner las siguientes 2 líneas de código:

mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());

exactamente debajo de su estado de vista Web.

He aquí un ejemplo de mi código implementado WebView:

public class WebView1 extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    WebView wv = (WebView) findViewById(R.id.wv1); //webview statement
    wv.setWebViewClient(new WebViewClient());    //the lines of code added
    wv.setWebChromeClient(new WebChromeClient()); //same as above

    wv.loadUrl("http://www.google.com");
}}

De esta manera, todos los enlaces se hace clic en el sitio web se carga dentro de su vista Web. (El uso de Android 1.2.2 Estudio con todo el SDK actualizado)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top