Estoy usando PhoneGap 1.5.0, jQuery 1.7.1 y jQuery mobile 1.0.1 y tratar de anular el boton atrás 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 de la backbutton no hace nada. La aplicación consta de un tabview como este:

<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 estúpido error o hay algo especial que debo tener en cuenta para que funcione correctamente? Gracias de antemano.

  • el código funciona como lo es para mí. ¿puede ver el mensaje de registro cuando usted haga clic en el botón atrás en otras páginas??
  • lamentablemente no tengo ninguna salida en el archivo de registro en otras páginas de la primera 🙁 Gracias por ayudar 🙂
  • he puesto mi código de prueba en un gist gist.github.com/2006096 usted puede ver y comprobar si falta algo
  • ¿la archivos de javascript en /js directorio. sin ella, no va a funcionar
  • Thx por el código. Funciona muy bien en un pequeño proyecto de demostración. Por desgracia, el error de la mina debe estar en algún otro lugar, a continuación,. 🙁
  • La versión de PhoneGap estaban usando para las pruebas? El código está trabajando en un mayor testproject de la mina de ejecución de phoneGap 1.4.0. Pero yo no puedo entrar a trabajar en mi proyecto actual 🙁
  • i m utilizando 1.4. He comprobado la nueva versión (1.5) y parece que el boton atrás funcionalidad está roto en eso.
  • después de pasar de la versión 1.2.0 a 1.5.0 el botón atrás se ha roto para mí.
  • tengo a publicar los cambios que he hecho a 1.5.0 para hacer que funcione. se puede probar y ver si están trabajando para usted.

InformationsquelleAutor Redfox | 2012-03-09

3 Comentarios

  1. 12

    He ido a través de la nueva Phonegap código fuente y lo hizo siguientes cambios para hacer que el backbutton trabajo.

    Html el código de la prueba

    <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 código siguiente en el else bloque 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]);
    }

    Poner código siguiente en fireDocumentEvent método de cordova definición 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 cordova-1.5.0.js en este gist con código actualizado https://gist.github.com/2020325

    A pesar de que se está trabajando para mí, pero todavía se puede necesitar algunos cambios para que funcione en todos los escenarios posibles.

    Editar

    Poner código siguiente en fireDocumentEvent método de cordova definición 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;
        }
    • funciona como un encanto. un bazillion gracias! 🙂 A partir de la aplicación bajo IOS con estos cambios, aparecerá una ventana emergente «idllbackbutton, app0, true» se inicia. Pero como usted dice, un par de modificación debe deshacerse de eso. ¿Sabes por casualidad, cómo podría crear algo así como «hacer sólo en ios» en la phonegap fuente?
    • voy a comprobar en ios pero en general la ventana emergente que aparece cuando el JS y de los nativos de la biblioteca son de diferente versión. Está usted seguro de que el iOS del proyecto es el uso de Phonegap 1.5 nativo de la biblioteca
    • En realidad backbutton caso no debe fuego para iOS
    • hay un código de diferencia entre córdoba android y iOS js archivos, por lo que usted no desea copiar el mismo archivo js para ambos proyectos.
    • Ah, ya sé, que no es exactamente lo que yo esperaría de un «escribir una vez, ejecutar en todas partes» cosita como phoneGap. Pero bueno… Thx de nuevo.
    • Esto no soluciona el bug para mí. I c a/p ed el código de gist, así que no hay errores tipográficos posible… he creado un Apache informe del problema
    • no es de trabajo o algún otro problema??
    • No funciona / corregir el error…
    • en realidad, se está trabajando para mí, puede usted poner su origen en algún lugar, así que puedo probar con eso. también quisiera saber de donde eres dispositivo de pruebas/simulador
    • ¿Tu hack de trabajo también para menubutton y searchbutton?! Yo no puede conseguir trabajo!
    • he puesto la actualización del bloque de código en la sección editar, funciona para searchbuttona y menubutton así
    • Esta solución corrige Phonegap/Cordovo 2.0.0 en Android JellyBean así.
    • Es 2.0.0, se ha solucionado el problema?? Porque estoy intentando y no es capaz de manejar la backbutton a todos
    • Tengo el problema con Córdoba 2.1.0 en Jelly Bean, así.

  2. 8

    Bryce Curtis es lo que sugiere en esa página con sólo cambiar la línea :

    channel.onNativeReady.subscribe(_self.boot);

    a :

    channel.onNativeReady.subscribeOnce(_self.boot);

    al final del archivo.

    Que parece hacer el truco para mí y fija el boton atrás Y la menubutton y searchbutton !

    • muchas gracias. se trabajó muy bien!
    • Hola, Esta resuelto menubutton haga clic en problema para mí. Pero me sale el siguiente mensaje de error en la consola. «Uncaught TypeError: Object [object object] no tiene ningún método ‘subscribeOnce’ en file:///android_asset/www/tercero/cordova-2.4.0.js:6524» por Favor, arrojar algo de luz sobre ella! Este error también puede ser ignorado sin los efectos secundarios?
  3. 0

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

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

    No es siquiera capaz de coger la función

    function handleBackButton() {
    
      console.log("Back Button Pressed!");
        navigator.app.exitApp();
    }
    • el uso de córdoba 2.0, el botón atrás manejo funciona como se describe, sin los cambios necesarios en el marco (al menos para mí). Yo lo hice así: documento.addEventListener(«deviceready», onDeviceReady, false); la función onDeviceReady() { document.addEventListener(«boton atrás», handleBackButton, false); } function handleBackButton() { yourBackButtonHandlingFunction(); } (por CIERTO: ninguna manera a obtener una decente formato en los comentarios? :/)
    • gracias 🙂 Se actualiza a la versión 2.0.
    • Usted puede utilizar comillas simples inclinadas (`) para el código de formato, like this.

Dejar respuesta

Please enter your comment!
Please enter your name here