web-dev-qa-db-ja.com

ハンドルAndroid PhonegapInAppBrowserの戻るボタン

InAppBrowserでページをナビゲートしているときに、Android戻るボタンを無効にするかオーバーライドしたいのですが、それを処理できるイベントリスナーを追加できますか?

EDIT:以下の@T_Dによる回答を見ると、提供されている解決策が最も近いものです。このプラグインのページをナビゲートしている間、すべてのPhoneGapの調整が機能しなくなるため、InAppBrowserのボタンをオーバーライドすることはできないようです。 APIライブラリを変更する以外に、他の解決策を見つけることができませんでした。ここにPhoneGapの人がいて、もっと何か知っているなら、コメントをいただければ幸いです。ありがとう。

私が得た最も近いもの:

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

documentation によると、ハードウェアの戻るボタンの動作をInAppBrowser用に構成できるようになりました。

ハードウェアバック:yesに設定すると、ハードウェア戻るボタンを使用してInAppBrowserの履歴を逆方向にナビゲートします。前のページがない場合、InAppBrowserは閉じます。デフォルト値はyesであるため、戻るボタンでInAppBrowserを閉じるだけの場合は、noに設定する必要があります。

おかげで クリスエリクソン

したがって、後方ナビゲーションが望ましい動作である場合は、InAppBrowserプラグインを更新するだけです。

詳細については、以下を参照してください: https://github.com/Apache/cordova-plugin-inappbrowser/pull/86

8
lhaferkamp

これは非常に簡単に実行できます(InAppBrowserバージョン0.3.3以降)が、Javaファイルを編集する必要があります。src/ com/org/Apache/corodova/inappbrowserディレクトリに移動しますInAppBrowserDialog.Javaを編集します。

変化する

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

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

次に、InAppBrowserに移動し、goBack関数を見つけて、次のように変更します。

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

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

そして今、ハードウェアの戻るボタンは、やるべき戻ることがなくなるまで戻ります。 [完了]ボタンはすでにInAppBrowserウィンドウを閉じているので、これがAndroidのデフォルトの動作であるはずです。

5
Kris Erickson

私はこれと同じ問題を抱えていて、ついにそれを機能させることができました。誰かに役立つ場合に備えて、ここに回答を投稿します。

これは私が使用するコードです:

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

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

したがって、重要なのは基本的にexitイベントをアタッチすることです。このイベントは、デバイスの戻るボタンがタップされたときに呼び出されます。

ところで、私はcordova.jsを使用し、Cordova CLIを使用してローカルでアプリをビルドしました。それが違いを生むかどうかはわかりませんが、念のために言及します。

4
Albert

編集メモ:私の知る限り、PhoneGapのInAppBrowserの戻るボタンをオーバーライドすることはできません。しかし、私は可能な解決策を探すために最善を尽くしました...

PhoneGapの戻るボタンをオーバーライドするeventListenerがあります-InAppBrowserでは機能しません-

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

戻るボタンをオーバーライドするための代替eventListener -OPはこれも機能しないと言った-

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

アクティビティの戻るボタンのオーバーライド-これはプレーンJavaであり、明らかにPhoneGapでは機能しませんでした-

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

結論:

上記の解決策は機能せず、リンク( この回答これ および 番目の回答 )をたどっても役に立ちませんでした。そのため、PhoneGapでInAppBrowserの戻るボタンをオーバーライドできない可能性が高くなります。誰かが解決策を思いついた場合、または新しいPhoneGapバージョンに変更があった場合は、遠慮なくお知らせください...

編集:

このプラグインをインストールすると、最も近い解決策にたどり着く可能性があります。

cordova plugin add org.Apache.cordova.inappbrowse

このプラグインが行うことWP8では、開くたびにInAppBrowser戻る/進む/閉じるボタンがオーバーレイされますその中のリンク/ページ。

この画像を参照してください: enter image description here

4
T_D

これはPhoneGap2.7で機能し、ヘルプはここから来ました 1つのページでAndroid戻るボタンを無効にし、他のすべてのページで終了ボタンに変更する

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

JQuerymobileを使用する:

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

Cordova 5.1.1を実行し、inappbroswerにページをロードするとき、inappbrowserが空白でそこにあるだけなのでindex.htmlページに戻るまで戻るボタンを機能させるのが好きです。だから私はこれを修正するために次のコードを使用しました。 inappbrowserを終了すると、アプリを終了します。

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

私の知る限り、inAppBrowserから戻るボタンをオーバーライドまたは検出することはできません。戻るボタンを押すと、inAppBrowserは非表示になり、コントロールをPhonegapページに戻します。これは、ウィンドウのfocusイベントで(jQueryを使用して)次のようにキャッチできます。

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

ブラウザを再度開きます。次に、必要に応じて、browser.executeScript()を使用してブラウザにロードされたWebアプリに信号を送ることができます。

このフォーラム投稿 に触発されました。

0
wvengen

私はこの質問にすでに答えがあることを知っていますが、これらの答えのいずれかがうまくいかなかった人(私など)のために私の答えを投稿します:

だから私はAndroidとIOSのマルチページアプリを持っていて、cordova 5.xを使用していて、ページIを除くすべてのページに以下のコードを追加しました必要なInAppBrowser:

delete window.open;

そして、私が使用した残りのページについて:

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

戻るボタンを処理するため

ご了承ください: delete window.open;ベース ドキュメント

'window.open'のデフォルトの動作を手動で復元します

その後、InAppBrowserプラグインはうまく機能し、すべてのページの戻るボタンを正しく処理しました。

最後にもう1つ追加することを忘れないでください:<script type="text/javascript" charset="utf-8" src="cordova.js"></script>ページでは、InAppBrowserが必要です。

この助けを願っています。

0
pouya