La relación entre las funciones "onBodyLoad () / onDeviceReady ()" de Phonegap y las funciones "$ (document) .ready ()" de JQuery,

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 se compone 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 sólo se carga una vez que se carga el DOM. Esto significa que su aplicación web podría, potencialmente, llamar a una función de JavaScript de PhoneGap antes de que se cargue.

El evento PhoneGap deviceready se activa una vez que PhoneGap se ha cargado completamente. Una vez que el dispositivo se haya disparado, puede realizar llamadas de forma segura a la función PhoneGap.

Normalmente, se desea adjuntar un detector de eventos con document.addEventListener una vez que se haya cargado el DOM del documento HTML.

En jQuery doc:

Mientras que JavaScript proporciona el evento de carga para ejecutar el código cuando se procesa una página, este evento no se activa hasta que todos los elementos, como las imágenes, se hayan recibido completamente. En la mayoría de los casos, la secuencia de comandos se puede ejecutar tan pronto como la jerarquía DOM ha sido completamente construida. El manejador pasado a .ready () está garantizado para ser ejecutado después de que el DOM está listo, por lo que este es generalmente el mejor lugar para adjuntar todos los otros manejadores de eventos y ejecutar otro código jQuery. Cuando se utilizan scripts que se basan en el valor de las propiedades de estilo CSS, es importante hacer referencia a hojas de estilo externas o integrar elementos de estilo antes de hacer referencia a los scripts.

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 demuestran que ready () es siempre anterior que onDeviceReady (), ¿cómo explicar esto? ¿Cómo debo usarlos? ¿Debo poner listo () en onDeviceReady () para hacer que todas las llamadas sean seguras?

Gracias de antemano.

Saludos, Chris

$(document).ready siempre disparará primero porque se activa cuando todos los elementos DOM se han cargado. Las imágenes, las funciones javascript, css, etc. pueden no haberse cargado en este momento.

Así PhoneGap ha puesto 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 asegurarse de que phonegap.js esté listo (y no sólo la interfaz de usuario de la aplicación, por ejemplo). Sólo después de cargar phonegap.js puede utilizar las funciones que proporciona.

Así que sí, $(document).ready disparará primero, pero eso no significa que usted puede usar phonegap.js (las llamadas 'api'). Usted no puede poner $(document).ready dentro de otra función (por lo que sé), ya que se activa por el DOM que se está cargando. Puede (pero no debe) llamar a su función onDeviceReady desde $(document).ready . El problema con esto es que si el dispositivo no está en realidad listo, las llamadas api no se realizará.

Así que seguiría utilizando el cuerpo onLoad / onDeviceReady cadena que han creado. Déjeme saber si esto necesita más elaboración.

  • ¿Funcionan los tamaños de fuente de escala automáticamente para android, usando el appcelerator?
  • ¿Es posible generar un enlace de "compartir en Facebook" que abra la aplicación nativa de Facebook en Android / iOS / mobile en lugar del diálogo de compartir web?
  • Excepción ocurrida durante la construcción del proyecto de Android
  • ScrollLeft cálculo incorrecto en Firefox Android
  • Aplicaciones Android y Android de etiqueta blanca
  • Aplicación para móviles: orientada a iPhone, WP7, Android y Blackberry
  • ¿Qué debo tener en cuenta al portar javascript mousedown / mouseup / mousemove / keypress oyentes a móviles?
  • ¿Es posible abrir mi aplicación a través de sms de la bandeja de entrada?
  • Detección de presencia de FPU en Android
  • Navegador predeterminado de Android que no se desplaza en la página web
  • Desarrollo móvil (Android & iOS) principiante necesita orientación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.