首頁 > 軟體

利用JavaScript獲取使用者IP屬地方法詳解

2022-05-24 14:00:34

寫在前面

想要像一些平臺那樣顯示使用者的位置資訊,例如某省市那樣。那麼這是如何做到的, 據說這個位置資訊的準確性在通訊網路運營商那裡?先不管,先實踐嘗試下能不能獲取。

嘗試一:navigator.geolocation

嘗試了使用 navigator.geolocation,但未能成功拿到資訊。

getGeolocation(){
  if ('geolocation' in navigator) {
    /* 地理位置服務可用 */
    console.log('地理位置服務可用')
    navigator.geolocation.getCurrentPosition(function (position) {
      console.dir('回撥成功')
      console.dir(position) // 沒有輸出
      console.dir(position.coords.latitude, position.coords.longitude)
    }, function (error) {
      console.error(error)
    })
  } else {
    /* 地理位置服務不可用 */
    console.error('地理位置服務可用')
  }
}

嘗試二:sohu 的介面

嘗試使用http://pv.sohu.com/cityjson?ie=utf-8獲取使用者位置資訊, 成功獲取到資訊,資訊樣本如下:

{"cip": "14.11.11.11", "cid": "440000", "cname": "廣東省"}
// 需要做跨域處理
getIpAndAddressSohu(){
  // config 是設定物件,可按需設定,例如 responseType,headers 中設定 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.23.44.50", "cid": "440000", "cname": "廣東省"};
    const info = res.data.substring(19, res.data.length - 1)
    console.log(info) // {"cip": "14.23.44.50", "cid": "440000", "cname": "廣東省"}
    this.ip = JSON.parse(info).cip
    this.address = JSON.parse(info).cname
  })
}

偵錯的時候,做了跨域處理。

proxy: {
  '/apiSohu': {
    target: 'http://pv.sohu.com/', // localhost=>target
    changeOrigin: true,
    pathRewrite: {
    '/apiSohu': '/'
    }
  },
}

下面是一張獲取到位置資訊的效果圖:

嘗試三:百度地圖的介面

需要先引入百度地圖依賴,有一個引數 ak 需要注意,這需要像管理方申請。例如下方這樣

<script src="https://api.map.baidu.com/api?v=2.0&ak=3ufnnh6aD5CST"></script>
getLocation() { /*獲取當前位置(瀏覽器定位)*/
  const $this = this;
  var geolocation = new BMap.Geolocation();//返回使用者當前的位置
  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(){/*獲取使用者當前位置(ip定位)*/
  function myFun(result){
    const cityName = result.name;
    console.log(result) // {center: O, level: 12, name: '廣州市', code: 257}
  }
  var myCity = new BMap.LocalCity();
  myCity.get(myFun);
}

成功使用者的省市位置,以及經緯度座標,但會先彈窗徵求使用者意見。

寫在後面

嘗試結果不太理想,sohu 的介面內部是咋實現的,這似乎沒有彈起像下面那樣的徵詢使用者意見的提示。

而在 navigator.geolocation 和 BMap.Geolocation() 中是彈起了的。

用別人的介面總歸是沒多大意思,也不知道不用徵求使用者意見是咋實現的。

經實測 sohu 的介面和 new BMap.Geolocation() 都可以拿到使用者的位置資訊(省市、經緯度等)。

到此這篇關於利用JavaScript獲取使用者IP屬地方法詳解的文章就介紹到這了,更多相關JavaScript獲取使用者IP屬地內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com