用navigator.geolocation.getCurrentPosition在IOS10以上的系統無法定位


昨天老板告訴我代碼有Bug(定位失敗),於是各種測試最終發現IOS10以上版本手機不能成功(窮,買不起iphone,測試不完全),先貼失敗代碼:

var city ="";
navigator.geolocation.getCurrentPosition(function(position) {
    var lat = position.coords.latitude;
    var lon = position.coords.longitude;
    var point = new BMap.Point(lon, lat); // 創建坐標點
    // 根據坐標得到地址描述
    var myGeo = new BMap.Geocoder();
                    
    myGeo.getLocation(point, function(result) {
         city= result.addressComponents.city;
         alert(city);
    });
});

經過查閱資料得知IOS系統在10以上版本考慮到安全問題禁止用戶在http協議下定位,要想定位必須將http協議升級成https協議,當然也有別的辦法,比如調用百度地圖API接口實現,廢話不多,上代碼:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的Key(在百度地圖免費申請)"></script>
    <title>定位</title>
</head>
<body>
    <div id="allmap" style="width: 0;height: 0; display: none;"></div>
    <script type="text/javascript">
    // 百度地圖API功能
    var map = new BMap.Map("allmap");
    var point = new BMap.Point(108.95,34.27);
    map.centerAndZoom(point,12);
    var geolocation = new BMap.Geolocation();
    geolocation.getCurrentPosition(function(r){console.log(r.point)
        if(this.getStatus() == BMAP_STATUS_SUCCESS){
            var mk = new BMap.Marker(r.point);
            map.addOverlay(mk);
            map.panTo(r.point);
            var point = new BMap.Point(r.point.lng,r.point.lat);
            var gc = new BMap.Geocoder();
            gc.getLocation(point, function(rs){
               var addComp = rs.addressComponents; 
               console.log(rs);  
                 alert(addComp.city+"==="+addComp.district)
            });
        }else {
            alert('failed'+this.getStatus());
        }
    },{enableHighAccuracy: true})
    </script>
 
 
</body>

利用百度地圖API接口完美解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM