2012-09-23 6 views
6

Mam aplikację do gry w telefon, która wymaga przechwycenia przycisku wstecz. Działa to płynnie, ale gdy jestem na głównym ekranie i przycisk Wstecz jest wciśnięty, chcę zadzwonić do oryginalnego programu obsługi zdarzeń i pozwolić aplikacji zamknąć lub zrobić cokolwiek przychodzi naturalnie na platformę za pomocą takiej prasy. Wiem, że mogę powiedzieć aplikacji, by przestała działać, ale rozumiem, że jest to zła forma dla aplikacji na iPhone'a.Wywołanie domyślnego manipulatora Phonegap Back Button Handler

Bez względu na to, co próbuję (i próbowałem wielu rzeczy), nie mogę uruchomić oryginalnego programu obsługi. Jakakolwiek rada?

W moim kodu mam switch wewnątrz moim obsługi zdarzeń BackButton który kieruje aplikację jako potrzebne do skutku:

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

W jaki sposób uruchomi się program obsługi backbutton w iPhonie, jeśli nie ma przycisku wstecz? Gdy już o tym pomyślisz, możesz zapomnieć o obsłudze iPhone'a i obsłudze go dla Androida i WP7. Przeczytaj dokumentację Phonegap na temat tego wydarzenia i zobacz, które platformy dotyczą. http://docs.phonegap.com/en/2.0.0/cordova_events_events.md.html#backbutton – praneetloke

Odpowiedz

4

Detect ilekroć wylądować na głównym ekranie i usunąć niestandardowej obsługi zdarzeń.

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

i dodaj detektor zdarzeń na innych stronach (lub sekcjach).

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

Nadzieję, że pomaga.

+0

To już nie działa, przynajmniej nie na Androida. –

3

To właśnie użyłem i wydaje się działać dobrze dla mojego potrzebuje

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

Hope this helps ...

+0

To jest najlepsza odpowiedź, szukałem tego samego pytania przez tak długi czas, ale nie mogłem znaleźć niczego do pracy, dopóki Przekonałem się o tym, dziękuję, Sir! –

1

Cordova 7.x, przynajmniej na Androidzie, nie wydaje się poprawnie aktualizować stanu nadpisania. W związku z tym, @SHANK's answer już nie działa.

jako obejście, można wyłączyć przycisk wstecz nadrzędnymi ręcznie, co powoduje zachowanie domyślne:

navigator.app.overrideBackbutton(false); 

Aby ponownie czynne niestandardową obsługę, analogicznie zrobić:

navigator.app.overrideBackbutton(true); 

I złożony a bug report on Apache's issue tracker dotyczące to.