在 iOS 11 系统上访问JS API定位业务失败怎么解决?
苹果新发的 iOS 11 操作系统的一大特性是对 http 形式访问页面的限制变得非常严格(相比iOS 10 和 iOS 9)。高德提供的JS API功能均支持http和https两种协议访问,在iOS 11操作系统上推荐使用https形式访问功能页面和接口。
具体实施步骤:
1、引进JS API文件,最好下载到本地。
HTML
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.0&key=您申请的key值"></script>
请确保进入的JS API是1.4.1或者更高版本。v=1.4.0表示的是1.4.0版本,引入时请更新为1.4.1版本或者下载对应代码到本地后再引入。
2、使用定位的完整代码如下:
//获取用户所在位置的经纬度
var get_position = function(calltype,signdata,qrcodeID,codeBtnFlag){
var map,geolocation;
//加载地图,调用浏览器定位服务
map = new AMap.Map('container',{
resizeEnable: true
});
map.plugin('AMap.Geolocation',function(){
//geolocation = new AMap.Geolocation({
//获取经纬度等待的时间
//timeout: 4000//此为设置的超时毫秒数。若在指定时间内未定位成功,返回超时错误信息“TIMEOUT”,默认值为无穷大
//});
geolocation = new AMap.Geolocation();
//判断是否是ios系统,如果是,则调用远程定位方法
if (AMap.UA.ios) {
//使用远程定位,见 remogeo.js
var remoGeo = new RemoGeoLocation();
//替换方法
navigator.geolocation.getCurrentPosition = function() {
return remoGeo.getCurrentPosition.apply(remoGeo,arguments);
};
//替换方法
navigator.geolocation.watchPosition = function() {
return remoGeo.watchPosition.apply(remoGeo, arguments);
};
}
map.addControl(geolocation);
//询问是否允许获取地理信息
geolocation.getCurrentPosition();
//定位成功,返回经纬度信息
AMap.event.addListener(geolocation,'complete', onComplete);
//定位失败,返回定位出错信息
AMap.event.addListener(geolocation,'error',onError);
});
//解析定位结果
function onComplete(data) {
var qiandao_lng = data.position.getLng();
var qiandao_lat = data.position.getLat();
//利用经纬度,do something
}
//解析定位错误信息
function onError(data) {
alert('定位失败');
}
}
PS:要想在自己的项目中使用地图相关功能,可通过调用官方地图接口API,就可以使用其提供的功能,百度、腾讯、高德、谷歌等都有提供,至于使用哪一种看具体项目需求。