studio example evaluatejavascript android webview webviewclient

android - example - WebView loadUrl funciona solo una vez



webview evaluatejavascript (14)

EDITAR: Trabajé en este proyecto hace años y desafortunadamente no puedo verificar si alguna de las respuestas funciona en el escenario dado.

Estoy teniendo dificultades con una vista web que debería mostrar nuestro blog. Cuando se inicia, funciona bien. El usuario puede navegar a diferentes enlaces dentro de la vista web. Para volver al blog, hay un botón fuera de WebView que debería volver a cargar el sitio principal del blog.

El problema es que no se carga nada después de la segunda llamada a loadUrl. Aquí está mi código:

private WebView wv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.blog); wv = (WebView) findViewById(R.id.blog_webview); wv.getSettings().setJavaScriptEnabled(true); wv.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon { MyLog.logDump("onPageStarted: " + url); } @Override public void onPageFinished(WebView view, String url) { MyLog.logDump("onPageFinished: " + url); } }); wv.loadUrl(Constants.BLOG_URL); }

La función llamada por mi OnClickListener es la siguiente:

public void reLoadUrl() { wv.loadUrl(Constants.BLOG_URL); }

Pero a pesar de que los registros de onPageFinished y onPageStarted muestran que se está invocando mi wv.loadUrl y que está cargando la url correcta, el contenido de la propia vista web no cambia. He intentado borrar la memoria caché, el historial, la vista, probé diferentes WebSettings, intenté usar webView.goBack (), no el resultado. También esas ideas no funcionan: Extraño webview problema de GoBack en Android

A veces, reLoadUrl muestra el resultado deseado, pero una vez que falla, ya no se puede hacer que funcione nuevamente. ¿Alguna idea de lo que podría estar pasando? Intenté leer el código de WebView pero no pude encontrar nada que pudiera ayudarme.

Lo único que puedo agregar es que estamos usando algunas redes publicitarias que dependen en gran medida de las visitas web. Intenté rechazarlas, pero no eliminé las bibliotecas, por lo que no estoy seguro de que no sean las culpables.

¿¿Algunas ideas??


En onCreate , en lugar de usar wv.loadUrl(Constants.BLOG_URL); , simplemente use wv.loadDataWithBaseURL(baseUrl, readFileAsString("index.html") , mimeType, "UTF-8", null);


Estaba enfrentando el mismo problema y finalmente pude resolverlo. Soy nuevo en Android, no estoy seguro de que sea bueno o malo, pero funciona para mí. Simplemente borro la captura de la vista web y destruyo y recreo antes de volver a cargar otra URL.

mWebView.clearCache(true); // destroy before reload new url parentView.removeView(mWebView); mWebView.clearHistory(); mWebView.destroy();

Aunque mWebView.destroy (); generar un error "java.lang.Throwable: Error: WebView.destroy () llamado mientras aún está adjunto!" y lo busco pero no consigo ninguna solución y muchos dicen que no afecta la aplicación hasta ahora (aún no sé cómo resolver este NB: uso WebChromeClient).


Estaba enfrentando el mismo problema. Estaba creando una nueva vista web cada vez. Primero destruye tu webView anterior antes de crear uno nuevo. Espero que esta ayuda !! Haz de tu webview una variable global. Me gusta -

Webview w;

Luego, antes de crear una nueva vista web, simplemente destruye la anterior.

if(null != w) { //destroy the previous webview, before creating the new one w.destroy(); } w= new WebView(activity);


Estoy enfrentando el mismo problema y lo puse en funcionamiento siguiendo estos pasos:

webView.clearCache(true); webView.loadUrl("Url");

y tengo el url múltiple cargado correctamente.


He pasado el último día o algo así trabajando en una aplicación que utiliza un WebView. Tuve algunos problemas con la carga de datos en el WebView.

No estoy completamente seguro de que esto funcione pero quizás reemplace este código:

public void reLoadUrl() { wv.loadUrl(Constants.BLOG_URL);

}

con este código:

public void reLoadUrl () {

wv.clearView(); wv.loadUrl(Constants.BLOG_URL);

}

Tal vez cuando borres la vista web resuelva el problema.


Intenta cargar una página en blanco antes de:

wv.loadUrl("about:blank"); wv.clearHistory(); wv.clearView(); wv.loadUrl(Constants.BLOG_URL);

Edición: este es un código que usé anteriormente porque también tuve problemas con esto, por favor, inténtelo.


Intenta configurar un cliente WebChrome. La vista web necesita el soporte de WebChrome Clint para funcionar correctamente en algunos casos.

wv.setWebChromeClient(new WebChromeClient());


Le sugiero que intente recrear la WebView cada vez que la use y vea si eso hace alguna diferencia.

Primero guardar contexto, parms de diseño y padre.

Context context = wb.getContext(); ViewGroup.LayoutParams lp = wv.getLayoutParams(); ViewGroup parent = (ViewGroup)wv.getParent();

A continuación, detenga la carga y elimine la vista de su padre.

wv.stopLoading(); parent.removeView(wv);

Luego recrearlo y agregarlo de nuevo.

wv = new WebView(context); parent.addView(wv, lp);

Esas pueden ser otras propiedades que necesitará restaurar, pero esa es la idea general.


Llame a este método en onPause()

private void pauseWebView() { try { Class.forName("android.webkit.WebView") .getMethod("onPause", (Class[]) null) .invoke(webview, (Object[]) null); } catch(ClassNotFoundException cnfe) { } catch(NoSuchMethodException nsme) { } catch(InvocationTargetException ite) { } catch (IllegalAccessException iae) { } }


Me enfrenté al mismo problema y ninguna de las soluciones anteriores funcionó para mí. Así que lo arreglé recargando WebView usando JavaScript de la siguiente manera:

webView.loadUrl( "javascript:window.location.reload( true )" );

También es necesario habilitar JavaScript para la vista web:

webView.getSettings().setJavaScriptEnabled(true);


Simplemente haga un método en el que se vaciará una Reinicio de WebView completo y lo llamará desde reLoadUrl ().

void loadWebView() { wv = (WebView) findViewById(R.id.blog_webview); wv.getSettings().setJavaScriptEnabled(true); wv.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon { MyLog.logDump("onPageStarted: " + url); } @Override public void onPageFinished(WebView view, String url) { MyLog.logDump("onPageFinished: " + url); } }); wv.loadUrl(Constants.BLOG_URL); } public void reLoadUrl() { loadWebView(); }


Tuve el mismo problema, llamar a resumeTimers () solucionó el problema por mí ...


Use exacto en la siguiente secuencia.

wv.clearCache(true); wv.clearView(); wv.reload(); wv.loadUrl("about:blank"); wv.loadData(Constants.BLOG_URL);


@override public void onFormResubmission(WebView view, Message dontResend, Message resend){ resend.sendToTarget(); }