it-swarm.com.de

Handle Android Zurück Button auf Phonegap InAppBrowser

Ich möchte die Android-Zurück-Schaltfläche deaktivieren oder überschreiben, während ich im InAppBrowser durch Seiten navigiere. Kann ich einen Ereignis-Listener hinzufügen, der damit umgehen kann?

BEARBEITEN: Wenn ich die Antwort von @T_D unten betrachte, sind die angebotenen Lösungen die nächstgelegenen. Es scheint nicht möglich zu sein, die Schaltfläche in InAppBrowser zu überschreiben, da alle PhoneGap-Optimierungen beim Navigieren auf den Seiten dieses Plugins nicht mehr funktionieren. Ich konnte keine andere Lösung finden, als die API-Bibliothek zu ändern. Wenn es hier PhoneGap-Leute gibt, die etwas mehr wissen, freue ich mich über einen Kommentar. Vielen Dank.

Der nächste, den ich bekam:

var ref = window.open('http://Apache.org', '_blank', 'location=yes');
ref.addEventListener("backbutton", function () { })

Laut der Dokumentation kann das Verhalten des Hardware Back Buttons nun für den InAppBrowser konfiguriert werden:

hardwareback: Setzen Sie diese Option auf yes, um mit der Hardware-Zurück-Taste rückwärts durch den Verlauf von InAppBrowser zu navigieren. Wenn keine vorherige Seite vorhanden ist, wird InAppBrowser geschlossen. Der Standardwert ist yes. Sie müssen ihn also auf no setzen, wenn Sie möchten, dass die Schaltfläche "Zurück" den InAppBrowser einfach schließt.

Dank an Kris Erickson .

Aktualisieren Sie einfach Ihr InAppBrowser-Plugin, wenn die Rückwärtsnavigation das gewünschte Verhalten ist.

Weitere Informationen finden Sie unter: https://github.com/Apache/cordova-plugin-inappbrowser/pull/86

8
lhaferkamp

Ich hatte das gleiche Problem und habe es endlich zum Laufen gebracht. Ich werde die Antwort hier posten, falls es jemandem hilft.

Dies ist der Code, den ich benutze:

window.new_window = window.open(url, '_blank', 'location=no');

window.new_window.addEventListener("exit", function () {
    window.new_window.close();
});

Der Schlüssel ist also, das exit -Ereignis anzuhängen, das aufgerufen wird, wenn die Zurück-Taste des Geräts gedrückt wird.

Übrigens habe ich cordova.js verwendet und meine Apps lokal mit der Cordova CLI erstellt. Ich weiß nicht, ob das einen Unterschied macht, ich erwähne es nur für den Fall.

4
Albert

BEARBEITEN HINWEIS: Soweit ich weiß, ist es nicht möglich, die Zurück-Schaltfläche für den InAppBrowser in PhoneGap zu überschreiben. Aber ich habe mein Bestes getan, um nach möglichen Lösungen zu suchen ...

Es gibt einen eventListener zum Überschreiben der Zurück-Schaltfläche in PhoneGap - funktioniert nicht für InAppBrowser -

function onDeviceReady(){
    document.addEventListener("backbutton", onBackKeyDown, false);
}

Alternativer eventListener zum Überschreiben des Zurück-Buttons - das OP sagte, dass dies auch nicht funktioniert hat -

var ref = window.open('http://www.stackoverflow.com', '_blank', 'location=yes');
ref.addEventListener("backbutton", function () {
    //logic here
})

Überschreiben des Zurück-Buttons in einer Aktivität - das ist Java, hat in PhoneGap offensichtlich nicht funktioniert -

@Override
public void onBackPressed()
{
   //logic here
}

Schlussfolgerung:

Die obigen Lösungen haben nicht funktioniert. Das Folgen von Links ( diese Antwort , diese und eine dritte ) hat auch nicht geholfen. Daher ist es sehr wahrscheinlich, dass das Überschreiben der Zurück-Schaltfläche für den InAppBrowser in PhoneGap nicht möglich ist. Wenn jemand eine Lösung findet oder wenn sich die Dinge für eine neue PhoneGap-Version geändert haben, können Sie uns dies gerne mitteilen ...

BEARBEITEN:

Wenn Sie dieses Plugin installieren, gelangen Sie möglicherweise zur nächstgelegenen Lösung:

cordova plugin add org.Apache.cordova.inappbrowse

Was dieses Plugin in WP8 macht, überlagert es zurück/vor/schließen auf InAppBrowser, wenn Sie einen Link/eine Seite darin öffnen.

Siehe dieses Bild: enter image description here

4
T_D

Sie können dies jetzt (ab InAppBrowser Version 0.3.3) ganz einfach tun, müssen jedoch die Java-Dateien bearbeiten. Wechseln Sie in das Verzeichnis src/com/org/Apache/corodova/inappbrowser und bearbeiten Sie InAppBrowserDialog.Java:

Veränderung

 public void onBackPressed () {
    if (this.inAppBrowser == null) {
        this.dismiss();
    } else {
        // better to go through the in inAppBrowser
        // because it does a clean up            
        this.inAppBrowser.closeDialog();           
    }
}

zu

public void onBackPressed () {
    if (this.inAppBrowser == null) {
        this.dismiss();
    } else {
        if (this.inAppBrowser.canGoBack()) {
            this.inAppBrowser.goBack();
        }  else {
            this.inAppBrowser.closeDialog();
        }
    }
}

Gehen Sie dann zu InAppBrowser und suchen Sie die goBack-Funktion. Ändern Sie Folgendes:

/**
 * Checks to see if it is possible to go back one page in history, then does so.
 */
private void goBack() {
    if (this.inAppWebView.canGoBack()) {
        this.inAppWebView.goBack();
    }
}

zu

/**
 * Checks to see if it is possible to go back one page in history, then does so.
 */
public void goBack() {
    if (this.inAppWebView.canGoBack()) {
        this.inAppWebView.goBack();
    }
}

public boolean canGoBack() {
    return this.inAppWebView.canGoBack();
}

Und jetzt kehrt die Hardware-Zurück-Taste zurück, bis keine Zurück mehr zu tun sind. Ich denke wirklich, dass dies das Standardverhalten in Android sein sollte, da die Schaltfläche Fertig das InAppBrowser-Fenster bereits schließt.

4
Kris Erickson

Dies funktionierte für mich in PhoneGap 2.7, Hilfe kam von hier, Wie deaktiviere ich die Android-Zurück-Schaltfläche auf einer Seite und ändere sie auf jeder anderen Seite, um die Schaltfläche zu beenden

document.addEventListener("deviceready", onDeviceReady, false);
    function onDeviceReady() {
        document.addEventListener("backbutton", function (e) {
            e.preventDefault();
        }, false );
}
4
JamesRLamar

Verwenden Sie jQuery Mobile:

$(document).on('backbutton',
 function(e){
     e.preventDefault();
     // YOUR CODE GOES HERE
});
3
Marcin S.

Wenn ich Cordova 5.1.1 ausführe und Seiten in den inappbroswer lade, mag ich es, wenn die Schaltfläche "Zurück" funktioniert, bis der inappbrowser zu meiner index.html-Seite zurückkehrt, da diese leer ist und sich dort befindet. Also habe ich den folgenden Code verwendet, um dies zu beheben. Es beendet die App, wenn es den inappbrowser beendet.

window.open = cordova.InAppBrowser.open;                
            var ref = window.open(url, '_blank', 'location=no');
            ref.addEventListener('exit', function () {
                navigator.app.exitApp();
            });
3
Helzgate

Soweit ich weiß, ist es nicht möglich, die Zurück-Schaltfläche von inAppBrowser aus zu überschreiben oder zu erkennen. Wenn Sie die Zurück-Taste drücken, blendet inAppBrowser die Steuerung aus und kehrt zur Phonegap-Seite zurück. Sie können dies mit dem Ereignis focus im Fenster (mit jQuery) wie folgt abfangen

var browser = window.open('http://example.com', '_blank', 'location=no');
$(window).on('focus', function() {
    browser.show();
});

um den Browser erneut zu öffnen. Sie können dann browser.executeScript() verwenden, um zu signalisieren, dass die Webanwendung im Browser geladen ist, wenn Sie möchten.

Inspiriert von diesem Forumsbeitrag .

0
wvengen

Ich weiß, dass diese Frage bereits beantwortet wurde, aber ich poste meine Antwort für diejenigen, bei denen eine dieser Antworten nicht funktioniert hat (wie ich selbst):

daher habe ich eine App für mehrere Seiten für Android und IOS. Ich verwende Cordova 5.x und habe den folgenden Code auf jeder Seite hinzugefügt, mit Ausnahme der Seite, die ich für InAppBrowser benötigte:

delete window.open;

und dann für den Rest der Seiten, die ich benutzt habe:

document.addEventListener("backbutton", onBackKeyDown, false);
function onBackKeyDown(event) {
// your code for handling back button comes here
}

für die Handhabung der Zurück-Taste

beachten Sie Folgendes: delete window.open; basiert auf der Dokumentation

manuelles Wiederherstellen des Standardverhaltens von 'window.open'

danach funktionierte das InAppBrowser-Plugin hervorragend und ich habe die Schaltfläche "Zurück" auf allen Seiten korrekt behandelt.

eine letzte Sache, vergessen Sie nicht hinzuzufügen: <script type="text/javascript" charset="utf-8" src="cordova.js"></script> in Seiten, die Sie InAppBrowser haben müssen.

ich hoffe das hilft.

0
pouya