网页api实时导航避开api监听定位功能缺陷的两种处理方法
最近老师在带我们练习一些简单小项目的时候,要求我们用百度地图api复刻了校园导航。
然而,导航复刻遇到了一个问题:
在使用BMap.Geolocation 以及geolocation.getCurrentPosition(function(r)) 的api时,发现用定时器反复调用这个api并不能使实时位置发生改变。
一开始一直以为是其他问题,问了AI也没有解决。后来灵光一想才想到可能这个api本身就只会单次获取设备当前的位置信息(最初访问时的位置)
因此,如果要写导航,就不能使用百度地图自带的两个定位api,必须用H5原生的Navigator去写。
Navigator自带的监听位置信息的api 是geolocation.watchPosition().
// 实时监听定位(位置变化时触发)
const watchID = navigator.geolocation.watchPosition(
(position) => { console.log('实时位置更新:', position); },
(error) => { console.error('监听失败:', error); }
);
至于定位准度。自求多福。 毕竟现在要真写校园导航肯定是URL Scheme更为方便。
URL Scheme
URL Scheme 是一种自定义 URL 协议,用于在操作系统(如 iOS、Android、桌面端)中标识特定应用或服务,实现 “通过链接唤醒应用并传递参数” 的功能。它本质上是对标准 URL 格式的扩展,核心作用是建立 “外部链接” 与 “应用内部功能” 的映射关系,是跨应用通信的基础技术之一。
人话说就是一个可以跳转到手机端App / 软件的定制 “专属链接”,属于超链接类型的一种。
我在实现跳转手机导航的时候运用了百度地图app,高德地图app的URL Scheme
这里放一下几个常用导航软件的url scheme文档链接:
高德地图 Url Scheme 文档百度地图Url Scheme 文档腾讯地图Url Scheme 文档
收录于知乎专栏「js逆向实例」· 查看知乎原文