我遇到问题,如果地理定位被禁用,那么地图应该以指定位置为中心,但禁用时不会加载任何内容。启用地理定位时,if
语句的第一部分可以正常工作。为什么else
部分在禁用时不起作用?
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function (position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
var coords = new google.maps.LatLng(latitude, longitude);
var directionsService = new google.maps.DirectionsService();
var directionsDisplay = new google.maps.DirectionsRenderer();
var mapOptions =
{
zoom: 15,
center: coords,
mapTypeControl: true,
navigationControlOptions:
{
style: google.maps.NavigationControlStyle.SMALL
},
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("mapContainer"), mapOptions);
directionsDisplay.setMap(map);
directionsDisplay.setPanel(document.getElementById(''));
var request = {
origin: coords,
destination: 'BT42 1FL',
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function (response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
}
});
});
}
else {
alert("Geolocation API is not supported in your browser.");
var mapOptions =
{
zoom: 15,
center: 'BT42 1FL',
mapTypeControl: true,
navigationControlOptions:
{
style: google.maps.NavigationControlStyle.SMALL
},
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("mapContainer"), mapOptions);
}
alert
也不会提醒。
答案 0 :(得分:1)
至少在Chrome 24中,当用户navigator.geolocation
拒绝地理位置时,并非虚假。
如果用户拒绝地理定位,则会调用失败回调(getCurrentPosition
的第二个参数)。当然,对于任何其他未能获得该位置的情况也会发生这种情况。使用以下代码(a jsfiddle中提供):
function success() {
alert("success!");
}
function failure() {
alert("failure!");
}
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(success, failure);
alert("truthy!");
} else {
alert("falsy!");
}
在我的浏览器上,如果我点击“拒绝”按钮,则会发出“truthy”警告,然后显示“失败”。如果您想要提供相同的行为,无论地理定位是否失败或用户是否拒绝,我建议使用以下代码:
function noGeoInfo() {
alert("couldn't get your location info; making my best guess!");
}
function geoInfo(position) {
alert("hey your position is " + position + " isn't that swell?");
}
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(geoInfo, noGeoInfo);
} else {
noGeoInfo();
}