2012-09-23 4 views
6

Ich habe eine Phonegap-App, die erfordert, dass ich die Zurück-Taste erfassen. Das klappt gut, aber wenn ich auf dem Hauptbildschirm bin und die Zurück-Taste gedrückt halte, möchte ich den ursprünglichen Event-Handler aufrufen und die App schließen lassen oder alles, was auf natürliche Weise auf die Plattform kommt, mit einer solchen Presse erledigen. Ich weiß, dass ich die App beenden kann, aber verstehe, dass das eine schlechte Form für iPhone-Apps ist.Standard-Phonegap-Schaltfläche Zurück Handler anrufen

Egal, was ich versuche (und ich habe viele Dinge ausprobiert) Ich kann nicht den ursprünglichen Handler zu feuern. Irgendein Rat?

In meinem Code habe ich eine switch-Anweisung in meiner Backbutton Ereignisbehandlungsroutine, die die App nach Bedarf auf die Wirkung richtet:

für
switch blahBlah 
{ 
    case 'this' : 
     doThis() ; 
     break; 
    case 'main' : 
     // What do I do here that is well behaved for all platforms??? 
     break; 
    default: 
     doFoo() ; 
} 
+1

Wie würde der Backbutton-Handler im iPhone auslösen, wenn es keine Hardware-Zurück-Taste gibt? Sobald Sie darüber nachdenken, können Sie vergessen, es für das iPhone zu behandeln und es für Android und WP7 zu handhaben. Lesen Sie die Phonegap-Dokumente über das Ereignis und sehen Sie, auf welche Plattformen es angewendet wird. http://docs.phonegap.com/de/2.0.0/cordova_events_events.md.html#backbutton – praneetloke

Antwort

4

erkennen, wenn Sie auf dem Hauptbildschirm landen und Ihre benutzerdefinierten Ereignishandler entfernen.

document.removeEventListener("backbutton", function(){}, false); 

und den Ereignis-Listener auf den anderen Seiten (oder Abschnitten) hinzufügen.

document.addEventListener("backbutton", OverrideBackButton, false); 

Hoffe, dass hilft.

+0

Das scheint nicht mehr zu funktionieren, zumindest nicht auf Android. –

3

Dies ist, was ich verwendet habe, und es scheint zu funktionieren mein braucht

 function pageinit() { 
      document.addEventListener("deviceready", deviceInfo, true); 
     } 


     function deviceInfo() { 
      document.addEventListener("backbutton", onBackButton, true); 
     } 

     function onBackButton(e) { 
      try{ 
       var activePage = $.mobile.activePage.attr('id'); 

       if(activePage == 'Options'){ 
        closeOptions(); 
       } else if(activePage == 'Popup'){ 
        closePopup(); 
       } else if(activePage == 'HomePage'){ 

       function checkButtonSelection(iValue){ 
        if (iValue == 2){ 
          navigator.app.exitApp(); 
         } 
        } 

       e.preventDefault(); 
       navigator.notification.confirm(
        "Are you sure you want to EXIT the program?", 
        checkButtonSelection, 
        'EXIT APP:', 
        'Cancel,OK'); 
       } else { 
        navigator.app.backHistory(); 
       } 
      } catch(e){ console.log('Exception: '+e,3); } 
     } 

Hope this helps ...

+0

Dies ist die beste Antwort, ich habe für die gleiche Frage so lange gesucht, konnte aber nichts finden bis zu arbeiten Ich bin darüber gekommen, danke Sir! –

1

Cordova 7.x, zumindest unter Android, scheint den Override-Zustand nicht korrekt zu aktualisieren. Als Folge funktioniert @SHANK's answer nicht mehr.

Als Abhilfe können Sie manuell überschreiben Taste deaktivieren zurück, in Standardverhalten resultierende:

navigator.app.overrideBackbutton(false); 

Um individuelle Behandlung wieder aktiv, analog zu tun:

navigator.app.overrideBackbutton(true); 

I eingereicht a bug report on Apache's issue tracker in Bezug auf Dies.