HTML5地理定位navigator.geolocation.getCurrentPosition的问题

时间:2022-11-22 19:12:16
写了个简单的页面。用navigator.geolocation.getCurrentPosition定位。
在PC端访问:
     IE可以获取经纬度。
     Google Chrome报error.POSITION_UNAVAILABLE错。
     Mozilla Firefox报error.TIMEOUT错。
手机端访问:
    Safari报error.TIMEOUT错。
    三星Note2自带浏览器报error.TIMEOUT错。

求大神帮忙分析原因啊!

21 个解决方案

#1


HTML5地理定位navigator.geolocation.getCurrentPosition的问题gps调用权限问题。
Chrome去设置里允许定位。。
手机打开Gps权限。

#2


急急急,在线等!
这影响到技术路线选型。如果HTML5不能实现地理定位,只能考虑用原生系统实现了。

#3


引用 1 楼 gy127132060 的回复:
HTML5地理定位navigator.geolocation.getCurrentPosition的问题gps调用权限问题。
Chrome去设置里允许定位。。
手机打开Gps权限。


Chrome已经允许定位了。

手机打开gps权限能详细点吗?iphone和安卓的gps都打开了。
iphone对safari有位置相关的设置吗?

#4


引用 3 楼 tianshisuo 的回复:
Quote: 引用 1 楼 gy127132060 的回复:

HTML5地理定位navigator.geolocation.getCurrentPosition的问题gps调用权限问题。
Chrome去设置里允许定位。。
手机打开Gps权限。


Chrome已经允许定位了。

手机打开gps权限能详细点吗?iphone和安卓的gps都打开了。
iphone对safari有位置相关的设置吗?


也不知道楼主采用的都是什么手机进行测试的。。。

苹果应该是设置中隐私里有定位服务。。
安卓一般是设置里有位置服务之类的,,楼主的手机就只能自己好好找找看了。。。。

#5


补充:
在一台iPhone5上用safari可以获取到位置。

是不是浏览器缓存的原因?

#6


补充:
最新发现。在安卓和苹果手机上,微信里面直接打开网页都可以了。用浏览器直接访问还是不行。是浏览器缓存问题吗?

#7


引用 4 楼 gy127132060 的回复:
Quote: 引用 3 楼 tianshisuo 的回复:

Quote: 引用 1 楼 gy127132060 的回复:

HTML5地理定位navigator.geolocation.getCurrentPosition的问题gps调用权限问题。
Chrome去设置里允许定位。。
手机打开Gps权限。


Chrome已经允许定位了。

手机打开gps权限能详细点吗?iphone和安卓的gps都打开了。
iphone对safari有位置相关的设置吗?


也不知道楼主采用的都是什么手机进行测试的。。。

苹果应该是设置中隐私里有定位服务。。
安卓一般是设置里有位置服务之类的,,楼主的手机就只能自己好好找找看了。。。。


感谢!苹果手机在隐私里找到了针对safari的单独设置。
安卓,打开了定位服务,还不行,再摸索一下,渐现曙光。

#8


谷歌浏览器要开启允许定位功能

#9


楼主,在pc浏览器能实现吗,我也遇到这个问题,不知咋办

#10


chrome定位是用的https://www.googleapis.com  需要连vpn

#11


Internet Explorer 9、Firefox、Chrome、Safari 以及 Opera 支持地理定位。

#12


https://common.diditaxi.com.cn/general/webEntry?wx=true&bizid=257&channel=70365

手机打开 滴滴打车  这个定位怎么做的?

正在找 有没有这样的接口

#13




        if (navigator.geolocation) {

            navigator.geolocation.getCurrentPosition(locationSuccess, locationError, {
                // 指示浏览器获取高精度的位置,默认为false
                enableHighAccuracy: true,
                // 指定获取地理位置的超时时间,默认不限时,单位为毫秒
                timeout: 5000,
                // 最长有效期,在重复获取地理位置时,此参数指定多久再次获取位置。
                maximumAge: 3000
            });

        } else {

            alert("Your browser does not support Geolocation!");
            alert("浏览器不支持html5来获取地理位置信息");
        }








        function locationSuccess(position) {
            // 获取到当前位置经纬度  本例中是chrome浏览器取到的是google地图中的经纬度 
            var lng = position.coords.longitude; 
            var lat = position.coords.latitude;

alert(lng);
    alert(lat);
            //console.log(lng);
            //console.log(lat);

            // 调用百度地图api显示 
            var map = new BMap.Map("Map");
            var point = new BMap.Point(lng, lat);

var marker = new BMap.Marker(point);  // 创建标注'

            map.addOverlay(marker);
            map.centerAndZoom(point, 15);
    map.addControl(new BMap.NavigationControl());






        function locationError(error){

            switch(error.code) {
                case error.TIMEOUT:
                    showError("A timeout occured! Please try again!连接超时,请重试 ");
                    break;
                case error.POSITION_UNAVAILABLE:
                    showError('We can\'t detect your location. Sorry!亲爱的火星网友,非常抱歉,我们暂时无法为您所在的星球提供位置服务');
                    break;
                case error.PERMISSION_DENIED:
                    showError('Please allow geolocation access for this to work.您拒绝了使用位置共享服务,查询已取消');
                    break;
                case error.UNKNOWN_ERROR:
                    showError('An unknown error occured!');
                    break;
            }
        }

        function showError(error) { console.log(error); }






<!DOCTYPE html> 
<html> 
   <head> 
       <title>H5地理位置Demo</title> 
       <script src="http://api.map.baidu.com/api?v=2.0&ak=B890bb83a6cf9664b3428b3fcb2506f2" type="text/javascript"> 
       </script> 
       
       </script> 
   </head> 
    <body> 
        <div id="Map" style="width:600px; height:400px"> 
        </div> 

        <div id="allmap" style="width:600px; height:400px"> 
        </div> 

    </body>  

 <script> 

Js放这里就可以了

   </script> 
 
</html> 

#14


这样是可以的但是 不怎么准确(⊙o⊙)哦

上班看滴滴 手机打开 定位很准

#15


楼主,我也遇到了同样的问题,请问楼主是怎么解决的呢?

#18


https://www.mozilla.org/zh-CN/firefox/geolocation/
这里说navigator.geolocation 会去调用 google ,“发送给默认的位置定位服务提供者,也就是谷歌位置服务,由它来计算您的位置。最后您的位置信息就在您请求的网站上被共享出来。 ”  当被墙时,一切都是枉然~~

#19


在iPhone5 iphone6 iphone6s中出现了 error.POSITION_UNAVAILABLE;其他型号的苹果和安卓机型是好的;这个是怎么回事啊?

#20


我的可以啊~

#21


哈哈,看了17楼的链接,感觉可以哎,明天试下

#1


HTML5地理定位navigator.geolocation.getCurrentPosition的问题gps调用权限问题。
Chrome去设置里允许定位。。
手机打开Gps权限。

#2


急急急,在线等!
这影响到技术路线选型。如果HTML5不能实现地理定位,只能考虑用原生系统实现了。

#3


引用 1 楼 gy127132060 的回复:
HTML5地理定位navigator.geolocation.getCurrentPosition的问题gps调用权限问题。
Chrome去设置里允许定位。。
手机打开Gps权限。


Chrome已经允许定位了。

手机打开gps权限能详细点吗?iphone和安卓的gps都打开了。
iphone对safari有位置相关的设置吗?

#4


引用 3 楼 tianshisuo 的回复:
Quote: 引用 1 楼 gy127132060 的回复:

HTML5地理定位navigator.geolocation.getCurrentPosition的问题gps调用权限问题。
Chrome去设置里允许定位。。
手机打开Gps权限。


Chrome已经允许定位了。

手机打开gps权限能详细点吗?iphone和安卓的gps都打开了。
iphone对safari有位置相关的设置吗?


也不知道楼主采用的都是什么手机进行测试的。。。

苹果应该是设置中隐私里有定位服务。。
安卓一般是设置里有位置服务之类的,,楼主的手机就只能自己好好找找看了。。。。

#5


补充:
在一台iPhone5上用safari可以获取到位置。

是不是浏览器缓存的原因?

#6


补充:
最新发现。在安卓和苹果手机上,微信里面直接打开网页都可以了。用浏览器直接访问还是不行。是浏览器缓存问题吗?

#7


引用 4 楼 gy127132060 的回复:
Quote: 引用 3 楼 tianshisuo 的回复:

Quote: 引用 1 楼 gy127132060 的回复:

HTML5地理定位navigator.geolocation.getCurrentPosition的问题gps调用权限问题。
Chrome去设置里允许定位。。
手机打开Gps权限。


Chrome已经允许定位了。

手机打开gps权限能详细点吗?iphone和安卓的gps都打开了。
iphone对safari有位置相关的设置吗?


也不知道楼主采用的都是什么手机进行测试的。。。

苹果应该是设置中隐私里有定位服务。。
安卓一般是设置里有位置服务之类的,,楼主的手机就只能自己好好找找看了。。。。


感谢!苹果手机在隐私里找到了针对safari的单独设置。
安卓,打开了定位服务,还不行,再摸索一下,渐现曙光。

#8


谷歌浏览器要开启允许定位功能

#9


楼主,在pc浏览器能实现吗,我也遇到这个问题,不知咋办

#10


chrome定位是用的https://www.googleapis.com  需要连vpn

#11


Internet Explorer 9、Firefox、Chrome、Safari 以及 Opera 支持地理定位。

#12


https://common.diditaxi.com.cn/general/webEntry?wx=true&bizid=257&channel=70365

手机打开 滴滴打车  这个定位怎么做的?

正在找 有没有这样的接口

#13




        if (navigator.geolocation) {

            navigator.geolocation.getCurrentPosition(locationSuccess, locationError, {
                // 指示浏览器获取高精度的位置,默认为false
                enableHighAccuracy: true,
                // 指定获取地理位置的超时时间,默认不限时,单位为毫秒
                timeout: 5000,
                // 最长有效期,在重复获取地理位置时,此参数指定多久再次获取位置。
                maximumAge: 3000
            });

        } else {

            alert("Your browser does not support Geolocation!");
            alert("浏览器不支持html5来获取地理位置信息");
        }








        function locationSuccess(position) {
            // 获取到当前位置经纬度  本例中是chrome浏览器取到的是google地图中的经纬度 
            var lng = position.coords.longitude; 
            var lat = position.coords.latitude;

alert(lng);
    alert(lat);
            //console.log(lng);
            //console.log(lat);

            // 调用百度地图api显示 
            var map = new BMap.Map("Map");
            var point = new BMap.Point(lng, lat);

var marker = new BMap.Marker(point);  // 创建标注'

            map.addOverlay(marker);
            map.centerAndZoom(point, 15);
    map.addControl(new BMap.NavigationControl());






        function locationError(error){

            switch(error.code) {
                case error.TIMEOUT:
                    showError("A timeout occured! Please try again!连接超时,请重试 ");
                    break;
                case error.POSITION_UNAVAILABLE:
                    showError('We can\'t detect your location. Sorry!亲爱的火星网友,非常抱歉,我们暂时无法为您所在的星球提供位置服务');
                    break;
                case error.PERMISSION_DENIED:
                    showError('Please allow geolocation access for this to work.您拒绝了使用位置共享服务,查询已取消');
                    break;
                case error.UNKNOWN_ERROR:
                    showError('An unknown error occured!');
                    break;
            }
        }

        function showError(error) { console.log(error); }






<!DOCTYPE html> 
<html> 
   <head> 
       <title>H5地理位置Demo</title> 
       <script src="http://api.map.baidu.com/api?v=2.0&ak=B890bb83a6cf9664b3428b3fcb2506f2" type="text/javascript"> 
       </script> 
       
       </script> 
   </head> 
    <body> 
        <div id="Map" style="width:600px; height:400px"> 
        </div> 

        <div id="allmap" style="width:600px; height:400px"> 
        </div> 

    </body>  

 <script> 

Js放这里就可以了

   </script> 
 
</html> 

#14


这样是可以的但是 不怎么准确(⊙o⊙)哦

上班看滴滴 手机打开 定位很准

#15


楼主,我也遇到了同样的问题,请问楼主是怎么解决的呢?

#16


#17


#18


https://www.mozilla.org/zh-CN/firefox/geolocation/
这里说navigator.geolocation 会去调用 google ,“发送给默认的位置定位服务提供者,也就是谷歌位置服务,由它来计算您的位置。最后您的位置信息就在您请求的网站上被共享出来。 ”  当被墙时,一切都是枉然~~

#19


在iPhone5 iphone6 iphone6s中出现了 error.POSITION_UNAVAILABLE;其他型号的苹果和安卓机型是好的;这个是怎么回事啊?

#20


我的可以啊~

#21


哈哈,看了17楼的链接,感觉可以哎,明天试下