La anulación del comportamiento del botón Atrás de Android solo funciona en la primera página con PhoneGap

Estoy usando PhoneGap 1.5.0, jQuery 1.7.1 y jQuery mobile 1.0.1 e bash de anular el botón de respaldo 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 solo funciona en la primera página de mi aplicación. Después de cambiar a una página diferente, el botón de retroceso no hace nada. La aplicación consiste en una pestaña como esta:

  

Pilot

content be here ;)

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

Revisé el nuevo código fuente de Phonegap e hice los siguientes cambios para que el botón de retroceso funcione.

Código de prueba HTML

  

Coloque el siguiente código 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 siguiente código en el método fireDocumentEvent de la definición de 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á funcionando para mí, aún puede necesitar algunos cambios para funcionar en todos los escenarios posibles.

Editar

Ponga el siguiente código en el método fireDocumentEvent de la definición de 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 solo 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 arregló el botón Y Y el menú y el botón de búsqueda!

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

Las páginas en las que no he manejado el botón Atrás funcionan bien, pero el lugar donde manejo 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(); }