js前端獲取用戶位置及ip屬地信息

寫在前面
想要像一些平臺那樣顯示用戶的位置信息,例如某省市那樣。那么這是如何做到的, 據(jù)說這個位置信息的準(zhǔn)確性在通信網(wǎng)絡(luò)運營商那里?先不管,先實踐嘗試下能不能獲取。
嘗試一:navigator.geolocation
嘗試了使用 navigator.geolocation,但未能成功拿到信息。
getGeolocation(){
if ('geolocation' in navigator) {
/* 地理位置服務(wù)可用 */
console.log('地理位置服務(wù)可用')
navigator.geolocation.getCurrentPosition(function (position) {
console.dir('回調(diào)成功')
console.dir(position) // 沒有輸出
console.dir(position.coords.latitude, position.coords.longitude)
}, function (error) {
console.error(error)
})
} else {
/* 地理位置服務(wù)不可用 */
console.error('地理位置服務(wù)可用')
}
}
嘗試二:sohu 的接口
嘗試使用 pv.sohu.com/cityjson?ie… 獲取用戶位置信息, 成功獲取到信息,信息樣本如下:
{"cip": "14.11.11.11", "cid": "440000", "cname": "廣東省"}
// 需要做跨域處理
getIpAndAddressSohu(){
// config 是配置對象,可按需設(shè)置,例如 responseType,headers 中設(shè)置 token 等
const config = {
headers: {
Accept: 'application/json',
'Content-Type': 'application/json;charset=UTF-8',
},
}
axios.get('/apiSohu/cityjson?ie=utf-8', config).then(res => {
console.log(res.data) // var returnCitySN = {"cip": "14.11.11.11", "cid": "440000", "cname": "廣東省"};
const info = res.data.substring(19, res.data.length - 1)
console.log(info) // {"cip": "14.11.11.11", "cid": "440000", "cname": "廣東省"}
this.ip = JSON.parse(info).cip
this.address = JSON.parse(info).cname
})
}
調(diào)試的時候,做了跨域處理。
proxy: {
'/apiSohu': {
target: 'http://pv.sohu.com/', // localhost=>target
changeOrigin: true,
pathRewrite: {
'/apiSohu': '/'
}
},
}
下面是一張獲取到位置信息的效果圖:

嘗試三:百度地圖的接口
需要先引入百度地圖依賴,有一個參數(shù) ak 需要注意,這需要像管理方申請。例如下方這樣
<script src="https://api.map.baidu.com/api?v=2.0&ak=3ufnnh6aD5CST"></script>
getLocation() { /*獲取當(dāng)前位置(瀏覽器定位)*/
const $this = this;
var geolocation = new BMap.Geolocation();//返回用戶當(dāng)前的位置
geolocation.getCurrentPosition(function (r) {
if (this.getStatus() == BMAP_STATUS_SUCCESS) {
$this.city = r.address.city;
console.log(r.address) // {city: '廣州市', city_code: 0, district: '', province: '廣東省', street: '', …}
}
});
}
function getLocationBaiduIp(){/*獲取用戶當(dāng)前位置(ip定位)*/
function myFun(result){
const cityName = result.name;
console.log(result) // {center: O, level: 12, name: '廣州市', code: 277}
}
var myCity = new BMap.LocalCity();
myCity.get(myFun);
}
成功用戶的省市位置,以及經(jīng)緯度坐標(biāo),但會先彈窗征求用戶意見。


寫在后面
嘗試結(jié)果不太理想,sohu 的接口內(nèi)部是咋實現(xiàn)的,這似乎沒有彈起像下面那樣的征詢用戶意見的提示。

而在 navigator.geolocation 、 BMap.Geolocation() 和 BMap.LocalCity() 中是彈起了的。
用別人的接口總歸是沒多大意思,也不知道不用征求用戶意見是咋實現(xiàn)的。
經(jīng)實測 sohu 的接口、BMap.Geolocation() 和 BMap.LocalCity() 都可以拿到用戶的位置信息(省市、經(jīng)緯度等)。
以上就是js前端獲取用戶位置及ip屬地信息的詳細(xì)內(nèi)容,更多關(guān)于js獲取用戶位置ip屬地的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
微信小程序中不同頁面?zhèn)鬟f參數(shù)的操作方法
這篇文章主要介紹了微信小程序中不同頁面?zhèn)鬟f參數(shù)的操作方法,在開發(fā)項目中,避免不了不同頁面之間傳遞數(shù)據(jù)等,那么就需要進(jìn)行不同頁面之間的一個數(shù)據(jù)傳遞的,需要的朋友可以參考下2023-12-12
每天一篇javascript學(xué)習(xí)小結(jié)(RegExp對象)
這篇文章主要介紹了javascript中的RegExp對象知識點,對RegExp對象的基本使用方法,以及各種方法進(jìn)行整理,感興趣的小伙伴們可以參考一下2015-11-11
JavaScript中隨機數(shù)方法?Math.random()
這篇文章主要介紹了JavaScript中隨機數(shù)方法?Math.random(),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-06-06

