web-dev-qa-db-de.com

PhoneGap - Android-Exit-Schaltfläche "Zurück"

Ich versuche, den RSS-Reader mit jquery mobile und cordova zu programmieren. Mein RSS-Reader besteht aus 3 Seiten (im selben HTML-Dokument: page1, page2, page3). Ich versuche, das Verhalten der Rücktasten (Hardware) zu überschreiben, damit das Programm beendet wird. Um zu überprüfen, ob ich beim Projektieren keine Fehler mache, habe ich das PhoneGap-Beispielprojekt verwendet und in Eclipse geladen. Jede Beispielfunktion hat funktioniert, also habe ich meinen index.html- und res-Ordner in phonegap-Beispiel verschoben. In meine index.html importiere ich folgende Skripte:

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

und meine main.js-Datei sehen so aus:

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

Sie können die Version meiner Skripte im ersten Codebeispiel überprüfen. Irgendwelche Ideen, wie ich den Code zum Laufen bringen könnte, also einfach die App beenden würde, wenn ich auf meinem Xperia Arc die Zurück-Taste drücke? Ich kann meinen vollständigen Code bei Bedarf hochladen.

BEARBEITEN: Ich habe die Phonegap (Cordova) -Ton-Funktion auf meinem Android-Handy getestet, und es funktioniert, so dass dies nichts mit einer schlechten Skriptimplementierung hat. Es muss etwas in der main.js-Datei sein. Möglicherweise gibt es ein Kompatibilitätsproblem mit den Jquerymobile-Backbutton-Funktionen und der Phonegap-Backbutton-Funktion.

39
horin

Sie müssen warten, bis das Gerät zum Hinzufügen des Ereignis-Listeners bereit ist:

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);
}
82
mornaner

Wenn Sie keine Bibliothek verwenden möchten, können Sie window.location.hash verwenden, um das "Panel" zu erhalten, in dem sich Ihre App befindet .. _. Beispiel:

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
EtienneWan

Wenn Sie Jquery Mobile nicht verwenden möchten, ändern Sie $ .mobile.activePage.is ('# homepage') in document.getElementById ('# homepage') für @mornaner wie im folgenden Code:

document.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);
}

Auf diese Weise müssen Sie Jquery Mobile Kauderwelsch nicht nur für diesen Zweck herunterladen. Auch ActivePage ist seit JQuery Mobile 1.4.0 veraltet und wird aus 1.5.0 entfernt. ( Verwenden Sie stattdessen die getActivePage () - Methode aus dem Pagecontainer-Widget ).

6
shabang
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
dev

Um das Standardverhalten der Zurück-Schaltfläche auf Android-Geräten zu deaktivieren, registrieren Sie einfach einen Ereignishandler für die Zurück-Schaltfläche. Dies würde verhindern, dass die Zurück-Schaltfläche die Anwendung schließt.

Der unten gezeigte Code gilt speziell für Framework7

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

Registrieren Sie einen Ereignis-Listener für das Backbutton-Ereignis, um das Standardverhalten der hinteren Schaltfläche zu überschreiben. 

HINWEIS: Es ist nicht mehr erforderlich, eine andere Methode aufzurufen, um das Verhalten der hinteren Tasten zu überschreiben.

https://cordova.Apache.org/docs/de/latest/cordova/events/events.html#backbutton

0