Javascript 错误处理不在Chrome中使用HTML5地理定位
我有一个简单的地图,只要允许HTML5地理定位,它应该以用户的位置为中心加载。如果他们不选择让我们看到他们的位置,但由于某种原因,它不起作用,那么就有一个适当的功能 代码如下:Javascript 错误处理不在Chrome中使用HTML5地理定位,javascript,html,google-maps,google-maps-api-3,Javascript,Html,Google Maps,Google Maps Api 3,我有一个简单的地图,只要允许HTML5地理定位,它应该以用户的位置为中心加载。如果他们不选择让我们看到他们的位置,但由于某种原因,它不起作用,那么就有一个适当的功能 代码如下: var x = document.getElementById("msg"); function getLocation() { if (Modernizr.geolocation) { navigator.geolocation.getCurrentPosition(s
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);
var x=document.getElementById(“msg”);
函数getLocation(){
if(现代化地理定位){
navigator.geolocation.getCurrentPosition(showPosition,showError);
}
else{x.innerHTML=“此浏览器不支持地理位置。”;}
}
功能显示位置(位置){
变量映射选项={
中心:新的google.maps.LatLng(position.coords.latitude,position.coords.longitude),
缩放:10,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var map=new google.maps.map(document.getElementById(“map”)、mapOptions);
变量A选项={
类型:[“机构”]
};
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({
地图:地图
});
google.maps.event.addListener(自动完成,'place\u changed',函数(){
infoWindow.close();
var place=autocomplete.getPlace();
if(place.geometry.viewport){
map.fitBounds(place.geometry.viewport);
}否则{
地图。设置中心(地点。几何。位置);
map.setZoom(17);
}
标记器.设置位置(位置.几何.位置);
infoWindow.setContent(“”+place.name+”
);
信息窗口。打开(地图、标记);
google.maps.event.addListener(标记,'click',函数(e){
信息窗口。打开(地图、标记);
});
});
}
功能错误(错误){
开关(错误代码){
案例错误。权限被拒绝:
x、 innerHTML=“用户拒绝了地理位置请求。”
打破
案例错误。位置不可用:
x、 innerHTML=“位置信息不可用。”
打破
大小写错误。超时:
x、 innerHTML=“获取用户位置的请求超时。”
打破
违约:
x、 innerHTML=“发生未知错误。”
打破
}
}
google.maps.event.addDomListener(窗口'load',getLocation);
当然,主体中有一个id为msg的
元素。您可能注意到它在FF中没有触发,因为他们认为“现在不”不应该触发错误-请参见此处(最后一个响应说“停止重新打开此错误,我们这样做是出于设计”):
但是
Timeout是navigator.geolocation.getCurrentPosition
的options参数(可选第三个参数)的可接受属性。所以navigator.geolocation.getCurrentPosition(showPosition,showError,{timeout:8000})
是在8秒钟的“不活动”后到达淋浴ROR
的方法,在firefox的情况下,这意味着“不明确回答yes或never”
PS-询问并回答:可能重复感谢您的提示。然而,我在Chrome中遇到了这个问题。在Chrome中只有两个选项:允许或拒绝。奇怪的是,它在Chrome中对我有效(Mac-mountain lion,Chrome 28.0.1500.95,也是今天早上的Canary)。你的系统/浏览器的规格是什么?嗯,这很奇怪。我在Win 8 Pro上运行的是Chrome版本28.0.1500.95 m(不确定这是否与您的相同,或者“m”是否意味着什么)。