Estoy usando PhoneGap + jQuery Mobile en Android, estoy confundido acerca de las funciones "onBodyLoad()/onDeviceReady()" de Phonegap y "$(document).ready()" de Jquery.
En los documentos de PhoneGap:
PhoneGap consta de dos bases de código: nativo y JavaScript. Mientras se carga el código nativo, se muestra una imagen de carga personalizada. Sin embargo, JavaScript solo se carga una vez que se carga el DOM. Esto significa que su aplicación web podría, potencialmente, llamar a una función JavaScript de PhoneGap antes de que se cargue.
El evento PhoneGap deviceready se activa una vez que PhoneGap se ha cargado por completo. Después de que el dispositivo se haya disparado, puede realizar llamadas de forma segura a la función PhoneGap.
Por lo general, deseará adjuntar un detector de eventos con document.addEventListener una vez que se haya cargado el DOM del documento HTML.
En el documento jQuery:
Si bien JavaScript proporciona el evento de carga para ejecutar el código cuando se representa una página, este evento no se activa hasta que todos los activos, como las imágenes, se hayan recibido por completo. En la mayoría de los casos, el script se puede ejecutar tan pronto como la jerarquía DOM se haya construido por completo. Se garantiza que el controlador pasado a .ready() se ejecutará después de que el DOM esté listo, por lo que este suele ser el mejor lugar para adjuntar todos los demás controladores de eventos y ejecutar otro código jQuery. Al usar secuencias de comandos que se basan en el valor de las propiedades de estilo CSS, es importante hacer referencia a hojas de estilo externas o incrustar elementos de estilo antes de hacer referencia a las secuencias de comandos.
En los casos en que el código se basa en activos cargados (por ejemplo, si se requieren las dimensiones de una imagen), el código debe colocarse en un controlador para el evento de carga.
Mis experimentos muestran que ready() siempre es anterior a onDeviceReady(), ¿cómo explicar esto? ¿Cómo debo usarlos? ¿Debo poner ready() en onDeviceReady() para que todas las llamadas sean seguras?
Gracias de antemano.
Saludos, Chris
$(document).ready
siempre se activará primero porque se activa cuando se han cargado todos los elementos DOM. Es posible que las imágenes, las funciones de javascript, css, etc. no se hayan cargado en este momento.
Por lo tanto, PhoneGap le pide que coloque el método onload
en el método onLoad
del cuerpo para que se active cuando esa parte particular del DOM esté lista. Una vez que el DOM está preparado, crea un detector de eventos para garantizar que phonegap.js esté listo (y no solo la interfaz de usuario de la aplicación, por ejemplo). Solo después de cargar phonegap.js, puede usar las funciones que proporciona.
Así que sí, $(document).ready
se activará primero, pero eso no significa que puedas usar phonegap.js (las llamadas 'api'). No puede poner $(document).ready
dentro de otra función (hasta donde yo sé), ya que se activa cuando se carga el DOM. Sin embargo, puede (pero no debe) llamar a su función onDeviceReady
desde $(document).ready
. El problema con esto es que si el dispositivo NO está listo, las llamadas a la API no se realizarán.
Así que seguiría usando la cadena body onLoad/onDeviceReady que han configurado. Déjame saber si esto necesita más elaboración.