2012-08-08 10 views
5

Sto tentando di creare un'applicazione per PhoneGap per Windows Phone 7. Sto cercando di seguire la documentazione per l'evento "backbutton" (http://docs.phonegap.com/en/ 2.0.0/cordova_events_events.md.html # backbutton), ma non riesco a farlo funzionare.L'evento "backbutton" non verrà attivato

L'evento "deviceready" si attiva, ma l'evento "backbutton" non lo fa. Durante la compilazione e l'esecuzione nell'emulatore di Windows Phone di Visual Studio viene richiamata la funzione onDeviceReady e viene registrato "Pronto dispositivo", ma quando viene premuto il pulsante indietro dell'emulatore, l'applicazione viene chiusa e nella console non viene registrato nulla. Quando si preme il pulsante Indietro, la funzione OnBackKeyDown deve essere eseguita.

copia del codice dal documento ufficiale:

<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

È possibile riprodurre questo problema su un dispositivo fisico utilizzando il modello di progetto da 2.0.0. Nokia Lumia 800 con WP 7.5 (7.10.8773.98). Ti suggerisco di compilare una segnalazione di bug e pubblicare il link qui. https://issues.apache.org/jira/secure/Dashboard.jspa – Loda

+0

Ho compilato una segnalazione di bug https://issues.apache.org/jira/browse/CB-1218. Vota per questo !! – Loda

risposta

3

Sono riuscito a risolvere questo problema copiando alcune parti di cordova-1.8.1.js in cordova-2.0.0.js.

In 1.8.1, cercare: var NamedArgs e copiare l'intero oggetto su 2.0.0.

In 2.0.0, cercare: var command = service + "/" + action + "/" + callbackId + "/" + JSON.stringify(args); e sostituirlo con:

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); 

questo potrebbe non essere una bella soluzione, ma funziona per me.

+0

Utilizzando il codice precedente, è possibile abilitare/disabilitare il comportamento del pulsante Indietro predefinito (uscita app) utilizzando la seguente istruzione: Cordova.exec (null, null, "CoreEvents", "overridebackbutton", [true]); oppure Cordova.exec (null, null, "CoreEvents", "overridebackbutton", [false]); – opznhaarlems