微信小程序与webview中的h5页面之间的通信,及ios端在h5中调用腾讯地图,默认定位不准确的解决方案

根据公司的需求,需要一套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端调用地图查询用户当前定位问题解决;


版权声明:本文为weixin_57994585原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。