2012-04-09 33 views
9

Tôi đang xây dựng một tập lệnh nhỏ mà khách hàng sẽ cài đặt trên trang của họ. Định vị địa lý là không cần thiết cho nó, tuy nhiên nếu nó tồn tại nó sẽ là tốt đẹp để có. Có cách nào để tôi kiểm tra xem trang khách hàng có yêu cầu thông tin vị trí địa lý hay không và liệu người dùng đã chọn cho phép nhận được lat & lon mà không tạo lời nhắc khác?Kiểm tra xem Vị trí địa lý có được phép và nhận Lat Lon

Trả lời

12

Nó không phải là có thể với các API định vị nhưng nó có thể với sự cho phép API mới

Mã này rất hữu ích nếu bạn muốn thử để nhận được tọa độ nhưng không muốn làm phiền người sử dụng với một hộp thoại nhắc cuz tọa độ mà không phải là quan trọng và cũng có thể dự phòng để geoIP

function getCoords(){ 
    return new Promise((resolve, reject) => 

     navigator.permissions ? 

     // Permission API is implemented 
     navigator.permissions.query({name:'geolocation'}).then(permission => 
      // is geolocation granted? 
      permission.state === "granted" 
      ? navigator.geolocation.getCurrentPosition(pos => resolve(pos.coords)) 
      : resolve(null), 
     reject) : 

     // Permission API was not implemented 
     reject(new Error("Permission API is not supported")) 
    ) 
} 

getCoords().then(coords => console.log(coords)) 

này sẽ giải quyết để null nếu phép vẫn chưa được cấp, đúc một lỗi nếu một số mã javascript đã không được hỗ trợ bởi trình duyệt và giải quyết các tọa độ nếu nó đã được cấp

+2

Đây là một cách tiếp cận tiện dụng nhưng - vì đó là một API khá mới - điều quan trọng là phải đề cập đến các vấn đề tương thích có thể xảy ra. Ví dụ: http://caniuse.com/#feat=permissions-api – Mario

5

Bạn có thể phát hiện xem đối tượng địa lý có tồn tại hay không bằng cách kiểm tra đối tượng cửa sổ.

if('geolocation' in window){ 
    navigator.geolocation.getCurrentPosition(...); 
} 

Điều này sẽ khiến người dùng yêu cầu họ muốn chia sẻ vị trí của họ với trang của bạn.

Nếu vị trí địa lý không có sẵn trong trình duyệt, điều này sẽ không chạy chút nào.


EDIT Nếu bạn đã nhắc người dùng trên trang này tải trang để cho phép truy cập vị trí địa lý, nó sẽ KHÔNG nhắc bạn lần nữa. Nếu người dùng điều hướng đi và quay lại trang này, nó sẽ nhắc họ lại.

Bạn có thể thực hiện các cuộc gọi tiếp theo tới API mà không cần nhắc trong phiên trang đó.

tham khảo: MDN Geolocation -- Watching the current position

+0

Tôi không nghĩ anh ấy quan tâm nếu trình duyệt hỗ trợ hay không - anh ấy muốn biết nếu trong trường hợp trình duyệt hỗ trợ nó, anh ấy có thể gọi 'getCurrentPosition() '* không có dấu nhắc bởi vì trang web đã gây ra một dấu nhắc như vậy trước. – ThiefMaster

+0

@ThiefMaster. Đó không phải là một downvote trừ khi bạn đặt câu hỏi. Ý định của người hỏi câu hỏi không rõ ràng. Trong trường hợp đó, tuy nhiên, vui lòng xem cập nhật của tôi. – tkone

+0

@TheifMaster thats correct – Stefan

4

Theo API nó không thể tìm hiểu của người dùng đã được phép trang web hiện tại để lấy vị trí của người sử dụng mà không gây ra một dấu nhắc nếu anh ấy có không. Xem Endless answer

Tôi khuyên bạn nên cho phép người dùng chuyển đối số khi nhúng tập lệnh cho biết liệu có nên sử dụng tính năng định vị địa lý hay không.

2

Có hay không bạn được nhắc có vẻ phụ thuộc vào trình duyệt và cài đặt 'bảo mật' nào. Safari 6 có 3 cài đặt: nhắc một lần cho mỗi trang web, nhắc một lần cho mỗi trang web mỗi ngày và từ chối. Chrome 23 có 3 cài đặt: cho phép tất cả, hỏi và từ chối tất cả. Chắc chắn sẽ nhận được tốt nếu có một cách để kiểm tra xem nó đã được cho phép mà không làm phiền người dùng.

Các vấn đề liên quan