2012-09-23 7 views
6

私はバックボタンをキャプチャする必要があるphonegapアプリケーションを持っています。これはうまく動作しますが、私がメイン画面にいて、戻るボタンが押されたときに、元のイベントハンドラを呼び出して、そのようなプレスでプラットフォームに自然に来るものを閉じるか、実行させます。私はアプリを終了するように言うことができるが、これはiPhoneアプリのための悪いフォームであることを理解することができます。デフォルトのPhoneGapコールバックボタンハンドラを呼び出す

私が何を試しても(そして私は多くのことを試しましたが)元のハンドラを起動することはできません。何かアドバイス?

私のコードで

私はの効果に、必要に応じてアプリを指示し、私の戻るボタンのイベントハンドラ内のswitch文を持っている:

switch blahBlah 
{ 
    case 'this' : 
     doThis() ; 
     break; 
    case 'main' : 
     // What do I do here that is well behaved for all platforms??? 
     break; 
    default: 
     doFoo() ; 
} 
+1

ハードウェアの戻るボタンがない場合、iPhoneのバックボタンハンドラはどのように起動しますか?それについて考えると、iPhone用に扱うことを忘れてAndroidやWP7用に扱うことができます。イベントに関するPhonegapのドキュメントを読んで、それがどのプラットフォームに適用されるかを見てください。 http://docs.phonegap.com/en/2.0.0/cordova_events_events.md.html#backbutton – praneetloke

答えて

4

あなたは、メイン画面に着陸し、カスタムイベントハンドラを削除したときに検出する必要があります。

document.removeEventListener("backbutton", function(){}, false); 

他のページ(またはセクション)にイベントリスナーを追加します。

document.addEventListener("backbutton", OverrideBackButton, false); 

希望するものがあります。私はjQueryの使用しています

if($("#mainPage").is(".ui-page-active")){ 

    navigator.app.exitApp(); 

} 

+0

これは少なくともAndroidではなく、もう動作しないようです。 –

3

これは私が使用したものであり、私のために正常に動作するようですこのことができます

 function pageinit() { 
      document.addEventListener("deviceready", deviceInfo, true); 
     } 


     function deviceInfo() { 
      document.addEventListener("backbutton", onBackButton, true); 
     } 

     function onBackButton(e) { 
      try{ 
       var activePage = $.mobile.activePage.attr('id'); 

       if(activePage == 'Options'){ 
        closeOptions(); 
       } else if(activePage == 'Popup'){ 
        closePopup(); 
       } else if(activePage == 'HomePage'){ 

       function checkButtonSelection(iValue){ 
        if (iValue == 2){ 
          navigator.app.exitApp(); 
         } 
        } 

       e.preventDefault(); 
       navigator.notification.confirm(
        "Are you sure you want to EXIT the program?", 
        checkButtonSelection, 
        'EXIT APP:', 
        'Cancel,OK'); 
       } else { 
        navigator.app.backHistory(); 
       } 
      } catch(e){ console.log('Exception: '+e,3); } 
     } 

希望...

+0

これは最高の答えです。私は長い間同じ質問を検索しましたが、これまでに何かを見つけることができませんでした私はこれを渡ってきた、ありがとうございました! –

1

コルドバ7.xは、少なくともAndroidでは、オーバーライド状態を適切に更新していないようです。その結果、@SHANK's answerはもう動作しません。

回避策として、あなたはデフォルトの動作で、その結果、手動オーバーライドボタンをバック無効にすることができます

navigator.app.overrideBackbutton(false); 

再アクティブカスタム処理には、同様の操作を行います。

navigator.app.overrideBackbutton(true); 

私はに関するa bug report on Apache's issue trackerを提出この。

関連する問題