我正在与 Gmaps 一起构建 HTML5 地理定位功能。
在等待用户批准进行地理定位时,我遇到了一个小问题:浏览器询问用户是否想要进行地理定位。当他单击“是”时,他已被定位,但未触发 gmap 事物并且地图未显示在屏幕上。然后,如果他刷新它,一切正常。这特别发生在手机上。
在处理地理定位的事情时,我给出了一段代码:
<script>
// <!-- GOOGLE MAPS & POSITION -->
var radius = 1;
var map;
var position;
jQuery(window).ready(function(){
//If we click on Find me Lakes
jQuery("#btnInit").click(initiate_geolocation);
initiate_geolocation();
$('#radius').change(function(v){
handle_geolocation_query(position);
});
});
function initiate_geolocation() {
if (navigator.geolocation)
{
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://maps.googleapis.com/maps/api/js?key=AIzaSyBbfJJVh0jL1X9b7XFDcPuV7nHD1HlfsKs&sensor=true&callback=initialize";
document.body.appendChild(script);
navigator.geolocation.getCurrentPosition(append_google_map, handle_errors);
}
else
{
yqlgeo.get('visitor', normalize_yql_response);
}
}
function handle_errors(error)
{
switch(error.code)
{
case error.PERMISSION_DENIED: alert("user did not share geolocation data");
break;
case error.POSITION_UNAVAILABLE: alert("could not detect current position");
break;
case error.TIMEOUT: alert("retrieving position timedout");
break;
default: alert("unknown error");
break;
}
}
function append_google_map(pos){
position = pos;
var mapOptions = {
zoom: 15,
center: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
streetViewControl: false,
mapTypeId : google.maps.MapTypeId.ROADMAP
}
if (typeof map == 'undefined') { //We make sure the map object hasn't been toogled to the page
map = new google.maps.Map(document.getElementById("gmap"), mapOptions);
//$('#gmap').slideToggle('slow');
setMarkerPosition(position.coords.latitude, position.coords.longitude);
}
handle_geolocation_query();
}
正如您在此处看到的,我正在使用错误回调和成功回调在启动函数中启动地理定位内容。那时用户屏幕上会出现一个弹出窗口,询问他是否批准地理位置。即使他点击是,似乎代码的某些部分没有被触发(或者我们被重定向到 handle_errors 不知道),因此,地图不会出现在屏幕上(它在代码中的处理得更进一步附加谷歌地图。
谁能帮我弄清楚为什么会发生这种情况以及如何处理?
非常感谢