需求说明:H5实现唤起高德和百度地图导航到目标景点的功能

分析:用户通过点击选择使用百度还是高德地图,点击后调用guide方法,判断设备上是否有高德或者百度APP,有就直接调用APP,如果没有就调用网页版

实现效果

image-20220427095335683
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//导航
guide(signMap) {
let self = this;
if(self.partnerAddress && self.partnerAddress != '') {
//景点位置partnerAddress 景点经纬度lng lat
var lng = self.lng;
var lat = self.lat;
if(signMap == 'gd') {
// 高德地图
if (self.customBrowserVersion().android) {
window.location.href="androidamap://viewMap?sourceApplication=appname&poiname="+self.partnerAddress+"&lat="+lat+"&lon="+lng+"&dev=0";
//判断是否跳转
setTimeout(function(){
let hidden = window.document.hidden || window.document.mozHidden || window.document.msHidden ||window.document.webkitHidden
if(typeof hidden =="undefined" || hidden ==false){
//调用高德地图
window.location.href ="https://uri.amap.com/marker?position="+lng+","+lat+"&name="+self.partnerAddress;
}
}, 2000);
}else if (self.customBrowserVersion().ios) {
window.location.href="iosamap://viewMap?sourceApplication=appname&poiname="+self.partnerAddress+"&lat="+lat+"&lon="+lng+"&dev=0";
//判断是否跳转
setTimeout(function(){
let hidden = window.document.hidden || window.document.mozHidden || window.document.msHidden ||window.document.webkitHidden
if(typeof hidden =="undefined" || hidden ==false){
//调用高德地图
window.location.href ="https://uri.amap.com/marker?position="+lng+","+lat+"&name="+self.partnerAddress;
}
}, 2000);
}
}else if(signMap == 'bd') {
// 百度地图
if (self.customBrowserVersion().android) {
//这个是安卓操作系统
let d = new Date();
let t0 = d.getTime();
window.location.href="androidamap://viewMap?sourceApplication=appname&poiname="+self.partnerAddress+"&lat="+lat+"&lon="+lng+"&dev=0";
//由于打开需要1~2秒,利用这个时间差来处理--打开app后,返回h5页面会出现页面变成app下载页面,影响用户体验
var delay = setInterval(function(){
var d = new Date();
var t1 = d.getTime();
if( t1-t0<3000 && t1-t0>2000){
window.location.href ="http://api.map.baidu.com/marker?location="+lat+","+lng+"&title="+self.partnerAddress+"&content=景点&output=html&src=webapp.baidu.openAPIdemo";
}
if(t1-t0>=3000){
clearInterval(delay);
}
},1000);
}
if (self.customBrowserVersion().ios) {
//这个是ios操作系统
let d = new Date();
let t0 = d.getTime();
window.location.href="iosamap://viewMap?sourceApplication=appname&poiname="+self.partnerAddress+"&lat="+lat+"&lon="+lng+"&dev=0";
//由于打开需要1~2秒,利用这个时间差来处理--打开app后,返回h5页面会出现页面变成app下载页面,影响用户体验
let delay = setInterval(function(){
var d = new Date();
var t1 = d.getTime();
if( t1-t0<3000 && t1-t0>2000){
window.location.href ="http://api.map.baidu.com/marker?location="+lat+","+lng+"&title="+self.partnerAddress+"&content=景点&output=html&src=webapp.baidu.openAPIdemo";
}
if(t1-t0>=3000){
clearInterval(delay);
}
},1000);
}
}
}else{
this.$toast.showToast('暂不知道该景区位置')
}

},
//区分设备
customBrowserVersion(){
var u = navigator.userAgent;
return {
trident: u.indexOf('Trident') > -1, //IE内核
presto: u.indexOf('Presto') > -1, //opera内核
webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,//火狐内核
mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1, //android终端
iPhone: u.indexOf('iPhone') > -1 , //是否为iPhone或者QQHD浏览器
iPad: u.indexOf('iPad') > -1, //是否iPad
webApp: u.indexOf('Safari') == -1, //是否web应用程序,没有头部与底部
weixin: u.indexOf('MicroMessenger') > -1, //是否微信 (2015-01-22新增)
qq: u.match(/\sQQ/i) == " qq", //是否QQ
isBaidu: u.indexOf('baiduboxapp') !== -1, //是否为百度浏览器
isqqBrowser: u.indexOf('mqqbrowser') !== -1, //是否为qq浏览器
isWxBrowser: u.indexOf('micromessenger') !== -1,//是否为微信浏览器
isUc: u.indexOf('ucbrowser') !== -1,//是否为uc浏览器
};
},

1.百度地图需要判断是否切出浏览器,高德地图需要做反应时间判断
2.当H5页面跳转到高德地图后下面的js将不再执行,所以判断是否切出浏览器即可。
3.当H5页面跳转到百度地图APP后下面的js依旧会执行,所以要判断时间。