根据公司的需求,需要一套uniapp写的微信小程序,和uniapp写的h5,h5通过webview嵌入小程序内;
问题一:h5页面,iOS端调用uni.chooseLocation(),地图初始定位位置不准确;
安卓用户可以正常使用,但是苹果用户调用腾讯地图时,定位初始位置显示不准确
解决方案:微信小程序中调用uni.chooseLocation()时,苹果用户的初始定位是正常的,
根据这个思路,我就想到,将h5跳转至小程序中调用腾讯地图,然后再将选择地图位置后的回调参数返回至h5页面中;但是面临webview和小程序之间的通讯问题;
注:h5页面跳转至小程序,需要引入微信JSSDK,使用wx.miniprogram.navigateTo();
问题二:小程序在调用完成uni.chooseLocation()后,如何将参数返还至h5页面;
常规思路是使用uni.navigateback(),但是回到原页面后,无法将地图选择的参数,带回原页面;查询各种资料后,
解决方案:在调用地图控件选择完位置后,使用setdata直接更新webview页面的data里面的变量值,然后uni.navigateback()返回h5页面的时候,会触发小程序中的webview页面中的onShow生命周期,在此生命周期中,重新定义webview的Src路径,之后在h5页面中的onLoad生命周期中,通过window.location.hash提取传递过来的参数值,至此,基本目的达成,但是又伴随两个小问题;
注:重新定义的src路径,需要在后面加上你在h5页面下的具体路径,确保webview刷新时的页面,是调用地图之后,返回的页面;
大致的代码如下:
(小程序中调用地图控件的页面代码,方法在onLoad中执行)

(小程序中webview页面代码)


(h5页面代码,onLoad生命周期中执行)

两个小问题:
① 如果用户之前填写了表单中的其他数据,那么返回的页面无法获取之前的表单数据,可以在跳转至地图控件时,将表单数据进行本地存储,返回时,onload解析并重新赋予,提交时,移除本地存储;
② 将webview页面刷新后,在h5页面需要点击两次返回,才能返回至h5的上一级页面;
解决方法:可以在跳转至地图控件时,优先执行uni.navigateback(),然后执行wx.miniprogram.navigateTo()跳转至地图控件页面;
至此,在h5端调用地图查询用户当前定位问题解决;
