backbutton android cordova override back-button

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



cordova onresume (3)

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

Estoy usando PhoneGap 1.5.0, jQuery 1.7.1 y jQuery mobile 1.0.1 e intento de reemplazar 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:

<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 deba considerar para que funcione correctamente? Gracias por adelantado.


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!


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

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

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