坑 -- h5获取用户当前定位

小程序webview获取当前定位,第一想法就是微信jssdk,但是项目没有接入过微信授权,后台也没有相应接口,本着前端能解决就不麻烦后台的初心,开启的爬坑之路:

获取浏览器定位

getLocation() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(
      res=>{
        const lat = res.coords.latitude;
        const lng = res.coords.longitude;
        // 经纬度转换地址
        $.ajax({
          url: "https://apis.map.qq.com/ws/geocoder/v1",
          data: {
            key: "BQFBZ-GNGCF-JIFJ5-J3MXI-RLLSJ-YBFEN",
            location: lat + "," + lng,
            output: "jsonp"
          },
          type: "get",
          async: false,
          dataType: "jsonp",
          jsonp: "callback",
          success: res => {
            console.log("转换经纬度:", res);
          },
          error: err => {
            console.log("fail转换经纬度失败:", err);
          }
        });
      },
      err => {
        switch (err.code) {
          case 0:
            console.log("不包括其他错误编号中的错误");
            break;
          case 1:
            console.log(
              "用户拒绝浏览器获取位置信息"
            );
            break;
          case 2:
            console.log(
              "尝试获取用户信息,但失败了"
            );
            break;
          case 3:
            console.log("设置了timeout值,获取位置超时了");
            break;
        }
      },
      {
        // 指示浏览器获取高精度的位置,默认为false
        enableHighAccuracy: false,
        // 指定获取地理位置的超时时间,默认不限时,单位为毫秒
        timeout: 15000,
        // 最长有效期,在重复获取地理位置时,此参数指定多久再次获取位置。
        maximumAge: 3000
      }
    );
  } else {
    alert("浏览器不支持定位");
  }
}

注:1、网站 http 需改为 https;

       2、谷歌浏览器无法获取;

       3、询问是否弹框只弹一次,如果手误“不允许”后,弹框不会再被调起无法重新选择,手动设置-隐私-定位服务开启,重新进入页面还是拒绝的状态,手动清除缓存也还是不行,测试浏览器:微信、safari、谷歌、360、ie ...

有其中两次测试时突然弹一次询问框,具体什么情况什么机制下才会重新弹起也不知道,就非常突然像给你来个惊喜一样,看到网上有人说去恢复出厂设置就可以重新弹起询问框......果断放弃

 

使用腾讯地图获取定位

// .html引入
<script type="text/javascript" src="https://3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js"></script>


// 页面方法
getLocation() {
  let fun = new qq.maps.Geolocation("BQFBZ-GNGCF-JIFJ5-J3MXI-RLLSJ-YBFEN", "myapp")
  if(fun) {
    fun.getLocation(res=>{
      console.log("获取经纬度成功:", res);
    },err=>{
      console.log("fail获取经纬度失败:", err);
    },{
      timeout: 5000,
      maximumAge: 3000,
      enableHighAccuracy: true
    })
  }else {
    console.log('定位未加载')
  }
}

注: 1、网站 http 需改为 https;

        2、pc端和微信开发者工具都可以获取,但是真机测试却怎么都失败,无法获取成功;(人都懵了)

 

腾讯地图根据ip获取定位

$.ajax({
  url: "https://apis.map.qq.com/ws/location/v1/ip",
  data: {
    key: "BQFBZ-GNGCF-JIFJ5-J3MXI-RLLSJ-YBFEN",
    output: "jsonp"
  },
  type: "get",
  async: false,
  dataType: "jsonp",
  jsonp: "callback",
  success: res => {
    console.log("获取经纬度成功:", res);
  },
  error: err => {
    console.log("fail获取经纬度失败:", err);
  }
});

微信、safari、谷歌....都可以获取成功啦,完美解决~高高兴兴去提测;

开心时间不到半小时,却被测试提bug了......以 “需要询问用户是否同意后才可获取定位”,“用户没有开启授权不可以让她获取到定位”.....类似的问题拒绝根据ip定位

最后最后-放弃了,乖乖去接入jssdk,让后台出接口吧哈哈哈....

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在uni-app的H5项目中,可以使用高德地图API来获取当前定位。下面是一种实现方式: 1. 首先,在uni-app项目中安装高德地图插件。可以通过以下命令进行安装: ``` npm install @types/amap-js-api --save ``` 2. 在需要获取定位的页面中,引入高德地图的JS API。可以在`index.html`文件中添加以下代码: ```html <script src="https://webapi.amap.com/maps?v=1.4.15&key=your_amap_key"></script> ``` 其中,`your_amap_key`需要替换为你自己的高德地图开发者密钥。 3. 在页面的`methods`中,编写获取定位的方法。可以使用高德地图提供的`AMap.Geolocation`类来实现。以下是一个示例代码: ```javascript methods: { getLocation() { AMap.plugin('AMap.Geolocation', () => { const geolocation = new AMap.Geolocation({ enableHighAccuracy: true, // 是否使用高精度定位,默认为true timeout: 10000, // 超过10秒后停止定位,默认:无穷大 }); geolocation.getCurrentPosition((status, result) => { if (status === 'complete') { // 定位成功,result中包含经纬度等信息 const { lng, lat } = result.position; console.log('当前位置经纬度:', lng, lat); } else { // 定位失败 console.log('定位失败'); } }); }); } } ``` 4. 在页面中调用`getLocation`方法即可获取当前定位信息。可以在按钮的点击事件中调用该方法: ```html <button @click="getLocation">获取当前定位</button> ``` 这样,当用户点击按钮时,就会触发获取当前定位的操作,并将结果输出到控制台中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值