2012-09-23 7 views
6

Tengo una aplicación de phonegap que requiere que capture el botón Atrás. Esto funciona estupendamente, pero cuando estoy en la pantalla principal y se presiona el botón Atrás, quiero llamar al controlador de eventos original y dejar que la aplicación se cierre o hacer lo que sea que llegue naturalmente a la plataforma con dicha pulsación. Sé que puedo decirle a la aplicación que se vaya, pero entiendo que esta es una mala forma para las aplicaciones de iPhone.Llamar por defecto Phonegap Back Button Handler

No importa lo que intento (y he intentado muchas cosas) no puedo hacer que el controlador original dispare. ¿Algún consejo?

En mi código que tengo una sentencia switch dentro de mi controlador de eventos BackButton que dirige la aplicación según sea necesario para el efecto de:

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

¿Cómo se activará el manejador de backbutton en el iPhone si no hay un botón de retroceso de hardware? Una vez que piense en eso, puede olvidarse de manejarlo para el iPhone y manejarlo para Android y WP7. Lea los documentos de Phonegap sobre el evento y vea a qué plataformas se aplica. http://docs.phonegap.com/en/2.0.0/cordova_events_events.md.html#backbutton – praneetloke

Respuesta

4

Detectar cada vez que la tierra en la pantalla principal y extraer de su controlador de eventos personalizado.

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

y agrega el detector de eventos en las otras páginas (o secciones).

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

Espero que ayude.

+0

Parece que ya no funciona, al menos no en Android. –

3

Esto es lo que he usado y parece que funciona bien para mi necesita

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

Espero que esto ayude ...

+0

Esta es la mejor respuesta, he buscado la misma pregunta por mucho tiempo, pero no pude encontrar nada para trabajar hasta Me encontré con esto, gracias señor! –

1

Cordova 7.x, al menos en Android, no parece actualizar correctamente el estado de anulación. Como consecuencia, @SHANK's answer ya no funciona.

Como solución alternativa, puede desactivar el botón de retroceso neutralizar manualmente, lo que resulta en un comportamiento por defecto:

navigator.app.overrideBackbutton(false); 

Para re-activa la aduana que dirige, de forma análoga hacer:

navigator.app.overrideBackbutton(true); 

Archivé a bug report on Apache's issue tracker respecto esta.