DeviceReady no funciona en la aplicación PhoneGap, ¿cómo?

Tengo una aplicación PhoneGap simple como fallows:

<!DOCTYPE HTML> <html> <head> <title>PhoneGap powered App</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="css/jquery.mobile-1.0.min.css" /> <script type="text/javascript" charset="utf-8" src="phonegap-1.3.0.js"></script> <script src="js/jquery-1.7.1.min.js"></script> <script src="js/jquery.mobile-1.0.min.js"></script> <script type="text/javascript" charset="utf-8"> document.addEventListener("deviceready", onDeviceReady, true); function onDeviceReady() { alert ('123'); } </script> </head> <body onload="onDeviceReady()"> <div data-role="page"> <div data-role="header"> <h1>title</h1> </div><!-- /header --> <div data-role="content"> <h2>Begin by inserting your credentials.</h2> ... </div><!-- /content --> </div><!-- /page --> <script type="text/javascript" charset="utf-8"> $(document).ready(function () { }); </script> </body> </html> 

Lo que sucede aquí es que la alerta de alert ('123'); Nunca se despide. Pero si retiro el otro código JavaScript y dejo solo la alerta se dispara.

También si uso $(document).ready(function () { alert ('123'); } Recibo la alerta.

¿Qué está sucediendo aquí, por qué el deviceready no está siendo despedido?

¿Algunas ideas?

Pruébelo de esta manera:

  document.addEventListener("deviceready", function(){ alert("123"); },true); 

Lo que @GPRathour proporciona funciona porque document.addEventListener() está escuchando deviceready , entonces si es cierto, ejecuta su función de alerta. No funcioné cómo lo tuviste por dos razones:

1) cuando el DOM cargado y bajó a su etiqueta de cuerpo estaba llamando a OnDeviceReady () y el oyente nunca recibió la llamada, por lo que phonegap no sabe que está listo para ejecutarse.

2) tendrías que llamar a tu oyente desde dentro de una función y usar 'false':

 function init(){ document.addEventListener("deviceready", onDeviceReady, false); } function onDeviceReady(){ alert('123'); } <body onload="onDeviceReady()"></body> 

Echa un vistazo a la API de phonegap en cuanto a por qué utilizar false en lugar de true en tu oyente, tiene que ver con la configuración predeterminada, pero vale la pena leer para entender cómo funcionan los oyentes phonegap.

Sólo en caso de que tenga el mismo problema que yo, no sabía que es necesario incluir el script cordova.js en su index.html, no tiene que proporcionar el archivo o la referencia, sólo tiene que incluir esta línea:

 <script type="text/javascript" charset="utf-8" src="cordova.js"></script> 

Y luego Cordova usará la biblioteca al compilar, después de que el evento sea despachado.

Cuando se utiliza PhoneGap 3.0 con WP8 Device Ready no funcionará porque Phonegap.js no está incluido en la solución de Visual Studio.

La solución es incluirlo manualmente por ahora.

Este código funciona para mí

 <body onload="init()"></body> function init() { document.addEventListener("deviceready", onDeviceReady, false); } function onDeviceReady() { // Now safe to use the Cordova API } 

Feliz codificación

La razón principal para un evento de ondeviceready no quemado en una o más plataformas, es cuando se intenta usar cordova / phonegap js de la plataforma equivocada.

Añádase a su oyente de eventos para deviceready dentro de su doc ​​…

 <script type="text/javascript" charset="utf-8"> $(document).ready(function () { document.addEventListener("deviceready", onDeviceReady, true); }); function onDeviceReady() { alert ('123'); } </script> 

Usted no quiere llamar a onDeviceReady () ya que esto ejecutará la función cuando se agrega el listener …

Compruebe las versiones de los archivos de biblioteca / jar de Cordova / phonegap que ha agregado con el proyecto (bajo libs) y el script <script src = "~ / Scripts / cordova-3.0.0.js" /> que se está refiriendo en Los archivos HTML. Si hay un desajuste, el <script /> puede no ser capaz de referirlo en el proyecto. Así que Córdoba no ejecuta su funcionalidad.

En mi caso, necesitaba eliminar meta http-equiv = "Content-Security-Policy" content = "…

Asegúrese de que la ruta debajo es correcta y ambas son necesarias para ser incluidas en html:

  <script type="text/javascript" src="cordova.js"></script> <script src="js/jquery-1.11.2.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ document.addEventListener("deviceready", onDeviceReady, false); }); function onDeviceReady() { alert("inside onDeviceReady"); } </script> 

Estás obligando a un manejador a deviceready antes de haber definido el manejador.

Correcto sería:

 function onDeviceReady(){ alert('123') } document.addEventListener("deviceready", onDeviceReady, false); 

Y, obviamente, su archivo phonegap-2.0.0.js (u otra versión) debe ser incluido en el archivo antes de este punto.

El mayor problema con los ejemplos de PhoneGap son sintaxis javascript incorrecta. Tenga cuidado con esto .. para esta pregunta, onDeviceReady debe tener llaves …

 document.addEventListener("deviceready", onDeviceReady(), true); function onDeviceReady() { alert ('123'); } 

  • Aplicación móvil de JQuery comportamiento extraño
  • Pantalla de inicio de la aplicación de Android con jQuery Mobile
  • No se puede cargar el archivo xml con jquery en el proyecto de phonegap desde la ruta de los recursos
  • Emitir en footable mientras que agrega datos dinámicos
  • JavaScript caret position
  • Error de acceso denegado con jQuery
  • Phonegap local build - jquery ajax error: estado de readystate 0 responsetext estado 0 statustext error
  • Eventos de clics no registrados
  • Cargando HTML local con $ .load
  • Jquery keyup no funciona en Android
  • PhoneGap: Cómo hacer que los enlaces de iframes se abran en InAppBrowser
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.