2011-04-28 29 views
7

tengo vista web que carga alguna página, cuando esté terminado aplico algo de JavaScript magia para desordenar con DOM. Todo está bien, carga la página y onPageFinished acabo de llamar wv.loadUrl(javascript);Android WebView + LoadURL con javascript + onPageFinished = lag

Pero no quiero ver proceso de carga, y cómo Javascript está trabajando, sólo necesito resultado, así que hice mi punto de vista invisible con wv.setVisibility(View.INVISIBLE); desde el principio, y hazlo visible de nuevo cuando todo esté hecho. Aquí es donde ocurre el problema.

Esta pieza de código debería hacer la vista visible después Javascript está terminado, pero wv.setVisibility(View.VISIBLE) incendios antes de JavaScript. Entonces, por un momento, veo la página y cómo está siendo modificada por javascript. Esto es feo.

public void onPageFinished (WebView view, String url) { 
     wv.loadUrl(javascript); 
     view.getSettings().setLoadsImagesAutomatically(true); 
     wv.setVisibility(View.VISIBLE); 

    } 

Tengo que LoadURL funciona de forma asíncrona, así que traté de hacer otra WebViewClient con sólo "hacer visible primera vista" método dentro onPageFinished, y lo utilizan para llamar a JS. Pero sigue fallando con el error de NPE.

wv2.setWebViewClient(new WebViewClient() { 
    @Override 
    public void onPageFinished (WebView view, String url) { 
    wv.setVisibility(View.VISIBLE); 
} 
}); 

por retraso de ahora me acaba de agregar después de Javascript (SystemClock.sleep(5000)), pero esto es como .. sí.

Respuesta

1

Ok, creo que lo he descubierto. Podemos tener devolución de llamada desde el final de javascript que se disparará "Mostrar la presentación" - como here o here (con controlador, porque quería actualizar la interfaz de usuario). Pero no cambiará nada, el problema parece estar en la velocidad de renderizado. Es solo lento. Así que por ahora me quedaré con 1 segundo de retraso después de disparar JS.

+1

Creo que tenemos una solución para este error: http://android-know-how-to.blogspot.co.il/2013/08/android-webview-javascript-onpagefinish.html – TacB0sS

0

no creo que va a conseguir una solución fácil para esto. Todo lo que Android puede detectar (como la mayoría de los navegadores) es cuando la página está completamente cargada, lo que significa que todo está descargado. Javascript también espera que se descargue, y ENTONCES comienza a funcionar. Es solo la forma en que funciona. La única solución que puedo pensar podría estar en JQuery. No sé mucho al respecto, pero generalmente hay soluciones para cosas como esta.

+1

No es un problema detectar si la página está cargada o no. ¿El problema es por qué otros métodos que se activan antes de javascript están terminados? – Sver

+0

Porque técnicamente hablando, y de acuerdo con su navegador, la página ha terminado de cargarse. Javascript ejecutándose, y la representación de la página son dos cosas completamente separadas. El Javascript solo se ejecuta cuando la página está completamente descargada, y usted solo puede detectar cuando la página está completamente descargada. No soy un experto en Javascript o JQuery, pero creo que encontrará su solución con una pregunta de JQuery, si es que hay una. – NotACleverMan

Cuestiones relacionadas