it-swarm.com.de

Das Überschreiben des Android-Backbutton-Verhaltens funktioniert nur auf der ersten Seite mit PhoneGap

Ich verwende PhoneGap 1.5.0, jQuery 1.7.1 und jQuery Mobile 1.0.1 und versuche, den Backbutton in Android wie angegeben zu überschreiben hier oder hier .

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

Aber es funktioniert nur auf der ersten Seite meiner App. Nach dem Wechsel auf eine andere Seite hat der Zurück-Button überhaupt nichts zu tun. Die App besteht aus einer Tabansicht wie folgt:

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

Ist es ein dummer Fehler oder gibt es etwas Besonderes, das ich beachten muss, damit es richtig funktioniert? Danke im Voraus.

17
Redfox

Ich habe den neuen Phonegap-Quellcode durchgesehen und folgende Änderungen vorgenommen, damit der Backbutton funktioniert.

HTML-Testcode

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

Fügen Sie den folgenden Code in den else-Block von document.addEventListener in cordova-1.5.0.js nach Zeile Nr. 507 ein

if (e === 'backbutton') {
    var exec = require('cordova/exec')
    exec(null, null, "App", "overrideBackbutton", [true]);
}

Fügen Sie folgenden Code in die fireDocumentEvent-Methode der cordova-Definition in cordova-1.5.0.js nach Zeile 592 ein

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

Ich habe die gesamte Datei cordova-1.5.0.js mit dem aktualisierten Code in diese Liste aufgenommen https://Gist.github.com/2020325

Obwohl es für mich funktioniert, müssen möglicherweise noch einige Änderungen vorgenommen werden, um in allen möglichen Szenarien zu funktionieren.

Bearbeiten

Fügen Sie folgenden Code in die fireDocumentEvent-Methode der cordova-Definition in cordova-1.5.0.js nach Zeile 592 ein

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

Bryce Curtis schlägt auf dieser Seite vor, nur die Zeile zu ändern:

channel.onNativeReady.subscribe(_self.boot);

zu:

channel.onNativeReady.subscribeOnce(_self.boot);

am Ende der Datei.

Das scheint den Trick für mich zu tun und den Backbutton UND den Menubutton und den Searchbutton zu reparieren!

8

@dhaval: Ich habe die folgenden Änderungen an der cordova-1.5.0.js in Android vorgenommen.

Die Seiten, auf denen ich die Schaltfläche "Zurück" nicht bearbeitet habe, funktionieren einwandfrei. Die Stelle, an der ich die Schaltfläche "Zurück" bearbeite, funktioniert jedoch nicht.

Es ist nicht einmal in der Lage, die Funktion auszuwählen

function handleBackButton() {

  console.log("Back Button Pressed!");
    navigator.app.exitApp();
}
0
Surya