如果地理位置被拒绝,我需要 JavaScript 来显示手动输入。
我尝试过的:
Modernizr.geolocation
navigator.geolocation
两者都没有描述用户之前是否拒绝访问地理位置。
如果地理位置被拒绝,我需要 JavaScript 来显示手动输入。
我尝试过的:
Modernizr.geolocation
navigator.geolocation
两者都没有描述用户之前是否拒绝访问地理位置。
watchPosition
并且getCurrentPosition
都接受在出现错误时调用的第二个回调。错误回调为错误对象提供了一个参数。对于被拒绝的权限,error.code
将是error.PERMISSION_DENIED
(数值1
)。
在此处阅读更多信息:https : //developer.mozilla.org/en/Using_geolocation
例子:
navigator.geolocation.watchPosition(function(position) {
console.log("i'm tracking you!");
},
function(error) {
if (error.code == error.PERMISSION_DENIED)
console.log("you denied me :-(");
});
编辑:正如@Ian Devlin 所指出的,Firefox(本文发布时为 4.0.1)似乎不支持这种行为。它将按预期在Chrome和可能Safari浏览器等。
在不提示用户的情况下,您可以使用可用的新权限 api:
navigator.permissions.query({ name: 'geolocation' })
.then(console.log)
(仅适用于 Blink 和 Firefox)
根据 W3C地理定位规范,您的getCurrentPosition
调用可以返回成功回调和失败回调。但是,您的失败回调将针对发生的任何错误调用,这是以下之一:(0) 未知;(1) 许可被拒绝;(2) 职位不可用;或 (3) 超时。[来源:Mozilla ]
在您的情况下,如果用户明确拒绝访问,您想要做一些特定的事情。您可以检查error.code
失败回调中的值,如下所示:
navigator.geolocation.getCurrentPosition(successCallback,
errorCallback,
{
maximumAge: Infinity,
timeout:0
}
);
function errorCallback(error) {
if (error.code == error.PERMISSION_DENIED) {
// pop up dialog asking for location
}
}
修复 Firefox 问题真的很容易。就我而言,我将地理位置保存在 Javascript 上名为 geolocation 的全局变量中。在使用这个变量之前,我只检查是否未定义,如果是,我只是从 IP 获取地理位置。
在我的网站中,我第一次获取位置没有任何问题,但我在我的简短示例中看到,第一次获取地理位置的时间太快了。
无论如何,这只是一个示例,您应该在每种情况下对其进行调整。
var geolocation = {};
getLocation();
$(document).ready(function(){
printLocation(); // First time, hasn't time to get the location
});
function printLocation(){
if(typeof geolocation.lat === "undefined" || typeof geolocation.long === "undefined"){
console.log("We cannot get the geolocation (too fast? user/browser blocked it?)");
// Get location by IP or simply do nothing
}
else{
console.log("LATITUDE => "+geolocation.lat);
console.log("LONGITUDE => "+geolocation.long);
}
}
function getLocation() {
// If the user allow us to get the location from the browser
if(window.location.protocol == "https:" && navigator.geolocation)
navigator.geolocation.getCurrentPosition(function(position){
geolocation["lat"] = position.coords.latitude;
geolocation["long"] = position.coords.longitude;
printLocation(); // Second time, will be return the location correctly
});
else{
// We cannot access to the geolocation
}
}
PS:我没有足够的声誉来评论上述答案,所以我不得不创建一个新答案。对于那个很抱歉。