[英]Error handling not working with HTML5 geolocation in Chrome
I have a simple map that should load centered around the user's location as long as they allow HTML5 geolocation. 我有一个简单的地图,只要他们允许HTML5地理定位,就应该以用户的位置为中心加载。 There's a function in place incase they don't choose to allow us to see their location, but for some reason it doesn't work.
如果他们不选择让我们看到他们的位置,则有一个适当的功能,但是由于某种原因,它不起作用。
Here's the code: 这是代码:
var x = document.getElementById("msg");
function getLocation() {
if (Modernizr.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition, showError);
}
else { x.innerHTML = "Geolocation is not supported by this browser."; }
}
function showPosition(position) {
var mapOptions = {
center: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("Map"), mapOptions);
var acOptions = {
types: ['establishment']
};
var autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete'), acOptions);
autocomplete.bindTo('bounds', map);
var infoWindow = new google.maps.InfoWindow();
var marker = new google.maps.Marker({
map: map
});
google.maps.event.addListener(autocomplete, 'place_changed', function () {
infoWindow.close();
var place = autocomplete.getPlace();
if (place.geometry.viewport) {
map.fitBounds(place.geometry.viewport);
} else {
map.setCenter(place.geometry.location);
map.setZoom(17);
}
marker.setPosition(place.geometry.location);
infoWindow.setContent('<div><strong>' + place.name + '</strong><br />');
infoWindow.open(map, marker);
google.maps.event.addListener(marker, 'click', function (e) {
infoWindow.open(map, marker);
});
});
}
function showError(error) {
switch (error.code) {
case error.PERMISSION_DENIED:
x.innerHTML = "User denied the request for Geolocation."
break;
case error.POSITION_UNAVAILABLE:
x.innerHTML = "Location information is unavailable."
break;
case error.TIMEOUT:
x.innerHTML = "The request to get user location timed out."
break;
default:
x.innerHTML = "An unknown error occurred."
break;
}
}
google.maps.event.addDomListener(window, 'load', getLocation);
And of course a <p>
element is in the body with an id of msg. 当然,主体中有一个
<p>
元素,其ID为msg。
Your'e probably noticing it doesn't fire in FF, because they see the "not now" as not something that should fire an error - see here (last response says "stop reopening this bug, it's by design that we do it that way"): 您可能会注意到它不会在FF中触发,因为他们认为“不是现在”不是应该触发错误的内容-请参见此处(最后的回答是“停止重新打开此错误,这是设计使然”方式”):
https://bugzilla.mozilla.org/show_bug.cgi?id=635175 https://bugzilla.mozilla.org/show_bug.cgi?id=635175
BUT 但
Timeout is an acceptable property of the options argument (optional third argument) of navigator.geolocation.getCurrentPosition
. 超时是
navigator.geolocation.getCurrentPosition
的options参数(可选的第三个参数)的可接受属性。 So navigator.geolocation.getCurrentPosition(showPosition, showError, {timeout:8000});
所以
navigator.geolocation.getCurrentPosition(showPosition, showError, {timeout:8000});
is the way to get to showError
after 8 seconds of "inactivity" - which in the case of firefox means "not answering explicitly yes or never". 是在8秒钟的“不活动”后进入
showError
的方法-在Firefox中,这意味着“不明确回答是或从不回答”。
PS - asked and answered : function fail never called if user declines to share geolocation in firefox PS-问与答: 如果用户拒绝在firefox中共享地理位置,则永远不会调用函数失败
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.