2012-08-08 24 views
5

Estoy intentando crear una aplicación de phonegap para Windows Phone 7. Estoy intentando seguir la documentación del evento "backbutton" (http://docs.phonegap.com/en/ 2.0.0/cordova_events_events.md.html # backbutton), pero parece que no puedo hacer que funcione.evento de "botón de retroceso" no se activará

El evento "deviceready" se dispara, pero el evento "backbutton" no. Al compilar y ejecutar el emulador de Windows Phone de Visual Studio, se llama a la función onDeviceReady y se registra "Dispositivo listo", pero cuando se presiona el botón Atrás del emulador, la aplicación finaliza y no se registra nada en la consola. Cuando se presiona el botón Atrás, se debe ejecutar la función OnBackKeyDown.

copia del código del documento oficial:

<html> 
    <head>  
     <script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script> 
     <script type="text/javascript"> 
      function onLoad() { 
       document.addEventListener("deviceready", onDeviceReady, false); 
      } 
      function onDeviceReady() { 
       console.log("Device ready"); 
       document.addEventListener("backbutton", onBackKeyDown, false); 
      } 
      function onBackKeyDown() { 
       console.log("Back button pressed"); 
      } 
     </script> 
    </head> 
    <body onload="onLoad()"> 
     <div></div> 
    </body> 
</html> 
+3

[SSCCE] (http://robzu.com/sscce-short-self-contained-correct-compilable-example/) – RobB

+1

Podría reproducir este problema en un dispositivo físico utilizando la plantilla de proyecto de 2.0.0. Nokia Lumia 800 con WP 7.5 (7.10.8773.98). Te sugiero que completes un informe de error y publiques el enlace aquí. https://issues.apache.org/jira/secure/Dashboard.jspa – Loda

+0

Llené un informe de error https://issues.apache.org/jira/browse/CB-1218. ¡Vota por eso! – Loda

Respuesta

3

Logré solucionar esto copiando algunas partes de cordova-1.8.1.js a cordova-2.0.0.js.

En 1.8.1, busque: var NamedArgs y copie el objeto completo a 2.0.0.

En 2.0.0, la búsqueda de: var command = service + "/" + action + "/" + callbackId + "/" + JSON.stringify(args); y sustituirlo por:

if (action == 'overridebackbutton') { 
    if (NamedArgs[service] && NamedArgs[service][action]) { 
     var argNames = NamedArgs[service][action]; 
     var newArgs = {}; 
     var len = Math.min(args.length,argNames.length); 

     for(var n = 0; n < len; n++) { 
      newArgs[argNames[n]] = args[n]; 
     } 

     args = newArgs; 
    } 
    else if(args && args.length && args.length == 1) { 
     args = args[0]; 
    } 
} 
var command = service + "/" + action + "/" + callbackId + "/" + JSON.stringify(args); 

esto podría no ser una solución bastante, pero funciona para mí.

+0

Usando el código anterior, puede activar/desactivar el comportamiento predeterminado del botón de retroceso (aplicación de salida) usando la siguiente instrucción: Cordova.exec (null, null, "CoreEvents", "overridebackbutton", [true]); O Cordova.exec (null, null, "CoreEvents", "overridebackbutton", [false]); – opznhaarlems

Cuestiones relacionadas