2011-11-17 10 views
7

Oto przybliżeniem mojego kodu:navigator.geolocation.getCurrentPosition(): wywołanie zwrotne pożaru, jeśli użytkownik mówi "nie"?

if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(
     function(position) { 
      // success! 
     }, 
     function(error) { 
      // error 
     }, 
     { timeout: 10000 } 
    ); 
} else { 
    // your browser/device doesn't support geolocation 
} 

Gdy ten kod działa, przeglądarka poprawnie pyta użytkownika o zgodę na śledzenie ich fizycznej lokalizacji. Jeśli użytkownik mówi "Tak", poprawnie uruchamia funkcję określoną przez pierwszy argument ("sukces").

Dla mnie niejasne jest to, co dzieje się, gdy użytkownik mówi "nie". W moich testach do tej pory (w Firefoksie 7), jeśli użytkownik mówi "nie", nic się nie dzieje. Nie spodziewałem się, że uruchomi się wywołanie zwrotne błędu (druga funkcja), ale tak się nie stanie. Mam nadzieję, że zareaguję na negatywną odpowiedź użytkownika (przez usunięcie linku, który wyzwala to połączenie).

Odpowiedz

8

Musisz obsłużyć go w drugim wywołaniu zwrotnym do navigator.geolocation.getCurrentPosition(), który obsługuje problemy, takie jak użytkownik odmawiający ich lokalizacji (między innymi).

navigator.geolocation.getCurrentPosition(fn, function(errorCode) { 
    if (errorCode == 1) { 
     alert('Y U NO GIVE LOCATION?'); 
    } 
}); 

W3C Spec.

List of error codes.

+4

porządku, wygląda na to, Firefox nie zadziała ŻADNYCH zwrotnego jeśli dać odpowiedź „Nie teraz”: http://stackoverflow.com/questions/6932758/firefox-5-geolokacyjny-i-nie-teraz-problem https://bugzilla.mozilla.org/show_bug.cgi?id=675533 Będzie to, jak sugeruje Alex, wywołanie błędu oddzwaniania, jeśli odpowiesz "Nigdy". – brianjcohen

+0

Widzę punkt widzenia programisty Mozilli na ten temat. Strona powinna mieć domyślne zachowanie, jeśli nie jest dostępna geolokalizacja, ale myślę też, że wyrażenie "Nie teraz" jest jak powiedzenie "Nie", ale nie pamiętam później odpowiedzi. – spig

+0

Myślę, że powinieneś zobaczyć "nie teraz" jako brak odpowiedzi, tak samo, jakby użytkownik zignorował całe wyskakujące okienko. – Ferdy

0

mała korekta do poprzedniej odpowiedzi

navigator.geolocation.getCurrentPosition(your_success_function, function(error) { 
    if (error.code == 1) { 
     alert('Y U NO GIVE LOCATION?'); 
    } 
}); 
Powiązane problemy