2012-09-23 47 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/zh/2.0.0/cordova_events_events.md.html#backbutton – praneetloke

回答

4

檢測,只要你登陸主屏幕上,並刪除您的自定義事件處理程序。

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

並在其他頁面(或節)上添加事件偵聽器。

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

希望有所幫助。

+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有關這個。