2012-04-09 42 views
9

我正在構建客戶端將在其頁面上安裝的小型腳本。地理位置不是必需的,但如果它存在的話,它會很好。有沒有一種方法可以讓我檢查客戶端頁面是否請求了地理位置信息,如果用戶選擇允許獲取lat而不創建另一個提示?檢查是否允許地理定位並獲取經緯度

回答

12

這是不可能的地理位置API,但它有可能與新的許可API

,如果你想嘗試接收的座標,但不想打擾與用戶此代碼是非常有用的提示對話框的Cuz座標並不重要,可能也回退到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)) 

這將解決爲null,如果許可尚未被授予蒙上了錯誤,如果一些JavaScript代碼沒有瀏覽器支持並且如果已被授予,則解析爲座標

+2

這是一個方便的方法,但由於它是一個相當新的API,提及可能的兼容性問題非常重要。例如:http://caniuse.com/#feat=permissions-api – Mario 2016-04-08 07:17:34

5

您可以通過檢查窗口對象來檢測功能是否存在。

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

這將導致單個用戶提示詢問用戶他們是否希望與您的頁面共享他們的位置。

如果地理定位在瀏覽器中不可用,則根本無法運行。


編輯 如果您已經提示在此 頁面加載允許地理位置訪問的用戶,也不會再次提示您。如果用戶瀏覽並返回到此頁面,則會重新提示他們。

您可以在該頁面會話期間不提示的情況下對API進行後續調用。

參考:MDN Geolocation -- Watching the current position

+0

我不認爲他關心瀏覽器是否支持它 - 他想知道,如果瀏覽器支持,他可以在不提示提示的情況下調用'getCurrentPosition()'*,因爲該網站已經引起了這樣的提示之前。 – ThiefMaster 2012-04-09 18:14:39

+0

@ThiefMaster。除非你問這個問題,否則這不是一個倒退。提問者的意圖不明確。但是,在這種情況下,請參閱我的更新。 – tkone 2012-04-09 18:23:55

+0

@TheifMaster那是正確的 – Stefan 2012-04-10 02:44:20

4

按照API這是不可能找出用戶已經允許目前的網站,而不會導致一個提示,如果他還沒有來檢索用戶的位置。查看無盡answer

我建議您在嵌入腳本時允許用戶傳遞參數,告訴它是否應該使用地理定位功能。

2

不管你是否被提示似乎取決於瀏覽器和它的隱私設置。 Safari 6有3個設置:每個站點提示一次,每個站點每天提示一次,並且拒絕。 Chrome 23有3種設置:全部允許,請求和拒絕。如果有方法檢查它是否已被允許而不打擾用戶,那麼一定會很好。