現(xiàn)代的Web應(yīng)用程序需要獲得用戶的位置來提供個(gè)性化的服務(wù),而javascript提供了方便的方法來獲取用戶的地理位置信息。我們可以利用HTML5的 Geolocation API 來獲取用戶在地球上的位置。HTML5的 Geolocation API大幅簡化了獲取地理位置的操作,使得開發(fā)者可以輕松的獲知用戶的大致位置或者比較精確的位置信息。
首先,我們需要檢查是否支持Geolocation API。下面是代碼:
if(navigator.geolocation) { // geolocation is supported } else { // geolocation is not supported }
如果瀏覽器支持 Geolocation API,navigator.geolocation
對象是可用的。瀏覽器可能返回一個(gè)PositionError
對象,其中包含如何處理錯(cuò)誤問題的信息,或者是返回一個(gè)Position
對象,其中包含我們的位置信息。
下面這段代碼可以獲取用戶當(dāng)前精確的位置信息:
navigator.geolocation.getCurrentPosition(success, error); function success(position) { console.log(position.coords.latitude, position.coords.longitude); } function error(err) { console.log(err); }
navigator.geolocation.getCurrentPosition()
函數(shù)接受兩個(gè)參數(shù),第一個(gè)是成功時(shí)調(diào)用的函數(shù),第二個(gè)是失敗時(shí)調(diào)用的函數(shù)。成功函數(shù)返回一個(gè)包含當(dāng)前位置信息的對象,包括精度和緯度信息。相反,如果我們失敗了,我們可以打印錯(cuò)誤信息到瀏覽器控制臺(tái),以驗(yàn)證代碼的可靠性。
不幸的是,有些時(shí)候可能需要很長時(shí)間才能獲取用戶的位置信息,甚至可能無法確定。因此,我們需要一個(gè)超時(shí)參數(shù)來限制等待getCurrentPosition()
中的時(shí)間。在下面示例中,我們將設(shè)置超時(shí)值為5秒:
navigator.geolocation.getCurrentPosition(success, error, {timeout: 5000}); function success(position) { console.log(position.coords.latitude, position.coords.longitude); } function error(err) { console.log(err); }
此外,我們還可以調(diào)整獲得的位置精度。例如,可以通過在選項(xiàng)對象上設(shè)置enableHighAccuracy
屬性為true
來嘗試獲取更高精度的位置信息。但是,這可能需要更長的時(shí)間才能執(zhí)行,也可能會(huì)更消耗電量。
navigator.geolocation.getCurrentPosition(success, error, {enableHighAccuracy: true}); function success(position) { console.log(position.coords.latitude, position.coords.longitude); } function error(err) { console.log(err); }
有時(shí),位置信息可能不是很重要,為了避免浪費(fèi)用戶電量而減少獲取的精度,我們可以將選項(xiàng)對象中的maximumAge
屬性設(shè)置為我們能夠接受的最大的緩存時(shí)間。
navigator.geolocation.getCurrentPosition(success, error, {maximumAge: 300000}); function success(position) { console.log(position.coords.latitude, position.coords.longitude); } function error(err) { console.log(err); }
最后,需要注意的是,HTML5的 Geolocation API在電腦上可能會(huì)獲得不準(zhǔn)確的值,但在移動(dòng)設(shè)備上可以正常工作。因此,在實(shí)際開發(fā)中,需要先進(jìn)行測試驗(yàn)證再投入生產(chǎn)使用。