WebView devuelve una ventana incorrecta.innerHeight
Tengo una aplicación que hace uso de la WebView de Android, así como algunos JavaScript. Cuando mi WebViewClient llama onPageFinished()
, onPageFinished()
mi JavaScript para ejecutar un método de inicialización. Mi JavaScript está habilitado y cargado antes de que me golpeó onPageFinished()
.
En ese método JavaScript uso window.innerWidth
. Sin embargo, el valor que devuelve siempre es incorrecto y siempre el mismo. Independientemente de mi orientación, indica que el ancho interno es 320 y la altura interior es 240. (Los valores de anchura correctos para el retrato y el paisaje son 360 y 598, respectivamente.) En cualquier otro lugar window.innerWidth
a window.innerWidth
o window.innerHeight
en JavaScript Un número exacto.
- Cómo utilizar navigator.app.exitApp ()?
- Obtener nombre de archivo después de que el filereader cargue asincrónicamente un archivo
- Desactivación de enlaces en Android WebView
- JQuery panel móvil no se cierra completamente sólo en el navegador de Android
- Android WebView: bloqueo tras la carga de url
Lo que es más desconcertante es que si compruebo la altura o el ancho de la WebView directamente en mi llamada onPageFinished()
usando
int height = view.getHeight();
int width = view.getWidth();
Entonces siempre devuelve correctamente (aunque devuelve los números de píxeles exactos, no el DIP). Esto me hace pensar que todo ha terminado de cargar con el WebView y por lo que no debería tener ningún problema en mi JavaScript.
¿Alguna idea sobre lo que esta pasando?
¡Gracias por adelantado!
- Rendimiento del androide Sencha Touch 2
- Cómo obtener los errores de la consola del navegador en Android-Phonegap-app, posiblemente en Eclipse?
- Abrir imagen con el visor de imágenes predeterminado en Android
- Ionic2 + Angular2 o Reactivo-nativo?
- Uncaught TypeError: No se puede leer la propiedad '1' de null
- ¿Cordova evita la arrastrar webview en el campo de enfoque?
- WebView oculta el teclado virtual durante loadUrl (), lo que significa que un teclado no puede permanecer abierto mientras llama a javascript
- Phonegap - automáticamente incluyendo cordova correcto
Esto se debe a que Javascript se ejecuta antes de la inicialización relacionada con View de WebView. Y WebView de Android devuelve un valor predeterminado de 320×240 a JS. Ejecutar su JS después de algún tiempo está bien, como este
function go() { int height = view.getHeight(); int width = view.getWidth(); }; window.setTimeout(go, 300);
Al final utilicé los valores de webView.getHeight()
y webView.getWidth()
, los webView.getWidth()
a la densidad de la pantalla y los pasé como argumentos a un método javascript a través de webView.loadUrl()
. Esta era la única manera que podía estar seguro de que estaba recibiendo los valores correctos.
Hacer lo que se sugirió en los comentarios anteriores, comprobar el ancho de 320 y la altura de 240 funcionará muy bien … hasta que se ejecute en un dispositivo con esas dimensiones exactas.
Después de leer, se ha producido otra solución. En código java, podemos usar
new Handler().post(new Runnable(){ @Override public void run(){ webview.loadUrl("...") } });
Añadirlo a QueueMessage y retrasar el js para ejecutar, y funciona.
Utilicé esto:
Java code in Activity
:
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
…
public class WebAppInterface { Context mContext; WebAppInterface(Context c) { mContext = c; } public int getWinHeight() { return webView.getHeight(); } }
Código JS :
var winHeight = Android.getWinHeight();
- Cómo saber si el usuario de Android vino de la aplicación de pantalla de inicio
- Orden de PopupWindow z