El comportamiento Override Android Backbutton sólo funciona en la primera página con PhoneGap

Estoy usando PhoneGap 1.5.0, jQuery 1.7.1 y jQuery móvil 1.0.1 y tratando de anular el backbutton en Android como se indica aquí o aquí .

document.addEventListener("deviceready", onDeviceReady, false); // PhoneGap loaded function onDeviceReady() { console.log("PhoneGap Ready!"); // waiting for button document.addEventListener("backbutton", handleBackButton, false); } // handle the back button function handleBackButton() { console.log("Back Button Pressed!"); navigator.app.exitApp(); } 

Pero sólo funciona en la primera página de mi aplicación. Después de cambiar a una página diferente el backbutton no hace nada en absoluto. La aplicación consta de una tabulación como esta:

 <body> <div data-role="page" id="pilotTab"> <div data-role="header"> <h1>Pilot</h1> </div> <div data-role="content" id="pilotContent"> content be here ;) </div> <div data-role="footer" data-position="fixed"> <div data-role="navbar"> <ul> <li><a href="pilotTab.html" data-transition="none">Lotse</a> </li> <li><a href="bookingTab.html" data-transition="none">Verkehr</a> </li> <li><a href="mainListTab.html" data-transition="none">B&ouml;rt</a> </li> </ul> </div> <!-- /navbar --> </div> <!-- /footer --> </div> 

¿Es un error estúpido o hay algo especial que tengo que considerar para que funcione correctamente? Gracias por adelantado.

He pasado por el nuevo código fuente de Phonegap y he hecho los siguientes cambios para hacer que el backbutton funcione.

Código de prueba html

 <script type="text/javascript"> $("#home").click(function(){ $.mobile.changePage("home.html"); }); document.addEventListener("deviceready", onDeviceReady, false); document.addEventListener("backbutton", handleBackButton, false); function onDeviceReady() { console.log("PhoneGap Ready!"); } function handleBackButton() { console.log("Back Button Pressed!"); navigator.app.exitApp(); } </script> 

Ponga el código siguiente en el bloque else de document.addEventListener en cordova-1.5.0.js después de la línea-no 507

 if (e === 'backbutton') { var exec = require('cordova/exec') exec(null, null, "App", "overrideBackbutton", [true]); } 

Ponga el código siguiente en el método fireDocumentEvent de la definición cordova-1.5.0.js en cordova-1.5.0.js después de la línea-no 592

 if(type == "backbutton"){ var e = document.createEvent('Events'); e.initEvent(type); if (data) { for (var i in data) { e[i] = data[i]; } } document.dispatchEvent(e); return; } 

He puesto todo el cordova-1.5.0.js en esta esencia con el código actualizado https://gist.github.com/2020325

Aunque está trabajando para mí, pero todavía puede necesitar algunos cambios para trabajar en todos los posibles escenarios.

Editar

Ponga el código siguiente en el método fireDocumentEvent de la definición cordova-1.5.0.js en cordova-1.5.0.js después de la línea-no 592

 if(type == "backbutton" || type == "menubutton" || type == "searchbutton"){ var e = document.createEvent('Events'); e.initEvent(type); if (data) { for (var i in data) { e[i] = data[i]; } } document.dispatchEvent(e); return; } 

Bryce Curtis está sugiriendo en esa página que cambie la línea:

channel.onNativeReady.subscribe(_self.boot);

a :

channel.onNativeReady.subscribeOnce(_self.boot);

Al final del archivo.

¡Eso parece hacer el truco para mí y fijado el backbutton Y el menubutton y el searchbutton!

@dhaval: He hecho los siguientes cambios en el cordova-1.5.0.js en Android.

Las páginas en las que no he manejado el botón está funcionando bien, pero el lugar donde estoy manejando el botón Atrás no funciona.

Ni siquiera es capaz de elegir la función

 function handleBackButton() { console.log("Back Button Pressed!"); navigator.app.exitApp(); } 
  • ¿Qué métodos de ciclo de vida de Android Fragment requieren super
  • Sobrecarga un APK y crea aplicaciones personalizadas
  • Cómo reemplazar CursorAdapter bindView
  • Error al invalidar el método toString
  • Borrar el botón de retroceso para actuar como botón de inicio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.