PhoneGap-salida de Android en el botón trasero


Estoy tratando de programar RSS reader usando jquery mobile y cordova. Mi lector RSS consta de 3 páginas (en el mismo documento HTML: page1, page2, page3). Estoy tratando de anular el comportamiento del botón de retroceso (hardware) para que salga del programa. Para comprobar que no estoy cometiendo ningún error en la configuración del proyecto he utilizado PhoneGap example project y lo he cargado en Eclipse. Cada función de muestra funcionó, por lo que he movido mi índice.ejemplo de carpeta html y res para phonegap. En mi índice.html I import the folowing scripts:

<script src="res/jquery-1.7.1.min.js"></script>
<script src="res/jquery.mobile-1.1.1.min.js"></script>
<script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script>
<script type="text/javascript" charset="utf-8" src="main.js"></script>

Y mi principal.el archivo js se ve así:

document.addEventListener("backbutton", function(e){
if($.mobile.activePage.is('#homepage')){
    e.preventDefault();
    navigator.app.exitApp();
}
else {
    navigator.app.backHistory()
}
}, false);

Puede comprobar la versión de mis scripts en el primer ejemplo de código. ¿Alguna idea sobre cómo podría hacer que el código funcione para que simplemente salga de la aplicación cuando presione el botón de retroceso en mi Arco Xperia? Puedo cargar mi código completo si es necesario.

EDIT: He probado la función de pitido phonegap(cordova) en mi teléfono Android y funciona, por lo que esto no tiene nada con una implementación de script incorrecta. Debe ser algo importante.archivo js. Tal vez algunos problema de compatibilidad con las funciones backbutton de jquerymobile y la función backbutton de phonegap.

Author: mornaner, 2012-09-09

5 answers

Debe esperar a que el dispositivo esté listo para agregar el receptor de eventos:

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady(){
    document.addEventListener("backbutton", function(e){
       if($.mobile.activePage.is('#homepage')){
           e.preventDefault();
           navigator.app.exitApp();
       }
       else {
           navigator.app.backHistory();
       }
    }, false);
}
 81
Author: mornaner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-02 11:04:42

Si no desea utilizar ninguna biblioteca, puede utilizar window.ubicación.hash para obtener el" panel " en el que está activada tu aplicación. Ejemplo :

function onDeviceReady(){
    document.addEventListener("backbutton", function(e){
        if(window.location.hash=='#home'){
            e.preventDefault();
            navigator.app.exitApp();
        } else {
            navigator.app.backHistory()
        }
    }, false);
}
document.addEventListener("deviceready", onDeviceReady, false);
 12
Author: EtienneWan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-02 18:56:23

Si no desea utilizar Jquery Mobile, cambie change.mobile.activePage.is ('#homepage') para documentar.getElementById ('#homepage') en la respuesta de @mornaner, como en el siguiente código:

Documento.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady(){
    document.addEventListener("backbutton", function(e){
       if(document.getElementById('#homepage')){
           e.preventDefault();
           navigator.app.exitApp();
       }
       else {
           navigator.app.backHistory()
       }
    }, false);
}

De esta manera, no es necesario descargar Jquery Mobile gibberish solo para este propósito. Además, activePage está obsoleta a partir de jQuery mobile 1.4.0 y se eliminará de 1.5.0. (Use el método getActivePage () desde el pagecontainer widget instead )

 6
Author: shabang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-29 22:15:08
function onLoad() {
        document.addEventListener("deviceready", onDeviceReady, false);
    }

    //enter code here enter code heredevice APIs are available
    //enter code here
    function onDeviceReady() {
        // Register the event listener
        document.addEventListener("backbutton", onBackKeyDown, false);
    }

    // Handle the back button
    //
    function onBackKeyDown() {
    }
 0
Author: dev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-21 06:51:17

Para deshabilitar el comportamiento predeterminado del botón atrás en dispositivos Android, simplemente registre un controlador de eventos para el botón atrás. Esto evitaría que el botón atrás cerrara la aplicación.

El código que se muestra a continuación es específicamente para el Marco7

$(document).on('page:beforeinit', function (e) {
if( $.fn.hyellaIMenu.mainView.history && $.fn.hyellaIMenu.mainView.history.length > 1 ){
    document.addEventListener( "backbutton", disableBackButton, false );
}
});

function disableBackButton( e ){
    if( $.fn.hyellaIMenu.mainView.history && $.fn.hyellaIMenu.mainView.history.length < 3 ){
        document.removeEventListener("backbutton", disableBackButton );
    }

if( $.fn.hyellaIMenu.mainView.history && $.fn.hyellaIMenu.mainView.history.length > 1 ){
    $.fn.hyellaIMenu.mainView.router.back();
}
};

Para anular el comportamiento predeterminado del botón de retroceso, registre un receptor de eventos para el evento de botón de retroceso.

NOTA: Ya no es necesario llamar a ningún otro método para anular el botón de retroceso comportamiento.

Https://cordova.apache.org/docs/en/latest/cordova/events/events.html#backbutton

 0
Author: Patrick Ogbuitepu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-24 21:31:10