如果用户的浏览器请求允许我们确定用户的位置,我想在页面上显示信息,但是如果浏览器已经过身份验证以向我们提供他们的位置,我不想尝试显示此信息。
有没有这样做的好方法?
详细地。我想显示一条消息,说“请点击‘允许这些人获取你的位置’的框”,因为在用户测试中,我们发现用户看不到对话并感到困惑。
但是,即使我们在他们通过位置查找页面时获得了他们的许可,这也会导致我们闪烁帮助消息。存储他们给予我们许可的事实并没有帮助,因为他们可能会撤销该许可,而我们不会知道。
有任何想法吗?
干杯马克。
如果用户的浏览器请求允许我们确定用户的位置,我想在页面上显示信息,但是如果浏览器已经过身份验证以向我们提供他们的位置,我不想尝试显示此信息。
有没有这样做的好方法?
详细地。我想显示一条消息,说“请点击‘允许这些人获取你的位置’的框”,因为在用户测试中,我们发现用户看不到对话并感到困惑。
但是,即使我们在他们通过位置查找页面时获得了他们的许可,这也会导致我们闪烁帮助消息。存储他们给予我们许可的事实并没有帮助,因为他们可能会撤销该许可,而我们不会知道。
有任何想法吗?
干杯马克。
您可以提交错误回调来getCurrentPosition()
确定用户是否拒绝跟踪/无法确定位置(规范)。
此外,我会设置一个 TimeOut,它会在一定时间后提示您的消息,因为在这种情况下,用户很可能忽略了浏览器对话框。
示例代码:
function getLocation(){
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition,showError);
// set a Timeout, after which the user gets prompted
// ugly global var but you could prevent this e.g. with a closure
t = window.setTimeout(
function(){alert("Please allow us to locate you;) !")},3000
);
} else {
alert("Geolocation is not supported by this browser.");
}
}
function showPosition(position){
alert("Latitude: " + position.coords.latitude + " - Longitude: " + position.coords.longitude);
// position could be determined, clear the timeout
window.clearTimeout(t);
}
function showError(error){
// an error occured, clear the timeout as well
window.clearTimeout(t);
switch(error.code) {
case error.PERMISSION_DENIED:
alert("User denied the request.");
// Do stuff here, etc. ask the user to please allow the request
break;
case error.POSITION_UNAVAILABLE:
alert("No Location information available.");
break;
case error.TIMEOUT:
// user probably didn't recognize the browser dialog
alert("The request timed out.");
break;
case error.UNKNOWN_ERROR:
alert("An unknown error occurred.");
break;
}
}
但是,您仍然可以存储权限并进行检查。如果他们撤销他们的许可,您将遇到错误回调,您可以在其中采取相应的措施。