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