2011-11-17 19 views
7

Dưới đây là một xấp xỉ của mã của tôi:navigator.geolocation.getCurrentPosition(): fire callback nếu người dùng nói "no"?

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

Khi mã này chạy, trình duyệt yêu cầu một cách chính xác cho người sử dụng cho phép theo dõi vị trí vật lý của họ. Nếu người dùng nói "Có", nó chạy đúng chức năng được chỉ định bởi đối số đầu tiên ('thành công').

Điều không rõ ràng đối với tôi là điều gì xảy ra khi người dùng nói "không". Trong thử nghiệm của tôi cho đến nay (trong Firefox 7), nếu người dùng nói "không", không có gì xảy ra. Tôi đã phần nào mong đợi các lỗi gọi lại (chức năng thứ hai) để chạy, nhưng nó không. Tôi hy vọng sẽ phản ứng với phản ứng tiêu cực của người dùng (bằng cách xóa liên kết kích hoạt cuộc gọi này).

Trả lời

8

Bạn cần xử lý nó trong cuộc gọi lại thứ hai đến navigator.geolocation.getCurrentPosition(), xử lý các vấn đề như người dùng từ chối vị trí của họ (trong số những thứ khác).

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

W3C Spec.

List of error codes.

+4

Được rồi, có vẻ như Firefox sẽ không sa thải bất kỳ gọi lại nếu bạn đưa ra câu trả lời "Không phải bây giờ": http://stackoverflow.com/questions/6932758/firefox-5-geolocating-and-not-now-issue https://bugzilla.mozilla.org/show_bug.cgi?id=675533 Nó sẽ, như đề xuất của Alex, kích hoạt lỗi gọi lại nếu bạn phản hồi "Không bao giờ". – brianjcohen

+0

Tôi có thể thấy điểm quan sát của nhà phát triển mozilla về điều này. Trang phải có hành vi mặc định nếu không có vị trí địa lý, nhưng tôi cũng nghĩ cụm từ "Không phải bây giờ" giống như nói "Không" một lần, nhưng không nhớ phản hồi của tôi sau đó. – spig

+0

Tôi nghĩ rằng bạn sẽ thấy "không phải bây giờ" là không có câu trả lời, giống như nếu người dùng sẽ bỏ qua các popup alltogether. – Ferdy

0

chỉnh nhỏ cho trả lời trước

navigator.geolocation.getCurrentPosition(your_success_function, function(error) { 
    if (error.code == 1) { 
     alert('Y U NO GIVE LOCATION?'); 
    } 
}); 
Các vấn đề liên quan