看题目很拗口,tiandi也不知道是否表述的正确。说的具体点就是,html5有个叫Geolocation的东西,这个东西封装在 navigator.geolocation 属性里,具体的作用是能显示浏览器的地址位置。它有一个方法叫做getCurrentPosition,而这个方法有3个参数,即getCurrentPosition(successCallback,errorCallback,positionOptions)。其中第三个参数就是本文标题所说的,Chrome andriod版本好像完全忽略了此参数,当然桌面版的Chrome好像没有这个问题。
positionOptions参数是一个json的形式,有三个值:
enableHighAcuracy — 布尔值: 表示是否启用高精确度模式,如果启用这种模式,浏览器在获取位置信息时可能需要耗费更多的时间。
timeout — 整数: 表示浏览需要在指定的时间内获取位置信息,否则触发errorCallback。
maximumAge — 整数/常量: 表示浏览器重新获取位置信息的时间间隔。
这里涉及到的就是enableHighAcuracy,这个参数默认是false,只需要WIFI或者GPRS即可进行模糊定位,当变为true时,表示需要gps进行精确定位。
来看一下下面的代码,代码来自天地团,实际运用当中,tiandi发现Chrome android版下关闭gps功能后,如果用到getCurrentPositionI(successCallback,errorCallback,null)的话,即第3个参数选为默认值,Chrome android会报错PERMISSION_DENIED,而用UCWEB则不会。
var geo = navigator.geolocation; geo.getCurrentPosition(function (pos) { var coord = pos.coords; accuracy = coord.accuracy; latitude = coord.latitude; longitude = coord.longitude; //alert(latitude+"|"+longitude); searchajax(city,latitude,longitude); }, function (error) { switch(error.code) { case error.PERMISSION_DENIED: alert("User denied the request for Geolocation."); break; case error.POSITION_UNAVAILABLE: alert("Location information is unavailable."); break; case error.TIMEOUT: alert("The request to get user location timed out."); break; case error.UNKNOWN_ERROR: alert("An unknown error occurred."); break; } });
具体可以分别用UCWEB和Chrome android点击导航页上的天地团的附近功能来查看。
姑且这里就当它是一个Chrome android版上的bug吧。
分享了这篇文章,感觉很复杂。
来访咯·