温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何利用JavaScript获取用户IP属地

发布时间:2022-05-24 17:33:12 来源:亿速云 阅读:281 作者:iii 栏目:开发技术

这篇文章主要介绍了如何利用JavaScript获取用户IP属地的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何利用JavaScript获取用户IP属地文章都会有所收获,下面我们一起来看看吧。

尝试一: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': '/'
    }
  },
}

下面是一张获取到位置信息的效果图:

如何利用JavaScript获取用户IP属地

尝试三:百度地图的接口

需要先引入百度地图依赖,有一个参数 ak 需要注意,这需要像管理方申请。例如下方这样

<script src="https://api.map.baidu.com/api?v=2.0&ak=3ufnnh7aD5CST"></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);
}

成功用户的省市位置,以及经纬度坐标,但会先弹窗征求用户意见。

如何利用JavaScript获取用户IP属地

写在后面

尝试结果不太理想,sohu 的接口内部是咋实现的,这似乎没有弹起像下面那样的征询用户意见的提示。

如何利用JavaScript获取用户IP属地

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

用别人的接口总归是没多大意思,也不知道不用征求用户意见是咋实现的。

经实测 sohu 的接口和 new BMap.Geolocation() 都可以拿到用户的位置信息(省市、经纬度等)。

关于“如何利用JavaScript获取用户IP属地”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“如何利用JavaScript获取用户IP属地”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI