gpt4 book ai didi

html - 接受请求时的地理位置反馈

转载 作者:太空狗 更新时间:2023-10-29 13:22:02 29 4
gpt4 key购买 nike

地理定位实现非常好,可以观察的步骤很少,但我猜只是缺少了一些东西。我无法查看用户是否接受了请求(在我获得位置对象之前),我不知道用户是否只是忽略了我的请求(在我超时期间)或者请求是否只是丢失了(并且失败回调没有得到无缘无故打电话)。

当用户接受请求时设置时间戳会很有用,我找不到任何能给我那种响应的东西。

最佳答案

根据我对您的需求的新理解,您想要这样的东西。(已测试:在 Opera 中 - 有效,Firefox 3.6 和 Chrome 8 - 不太好(我需要更多时间来调试))

场景:页面尝试获取位置...但用户完全忽略了提示,因此没有(接受或拒绝),并且由于从未发送过位置请求,因此也没有超时!

基于此,您可能希望添加自己的逻辑来处理这种情况。为了这个例子,我将制作我自己的“包装器”方法的原型(prototype)。 (对于挑剔的人——我不会容忍使用全局变量等。我只是想让一些东西起作用)

navigator.geolocation.requestCurrentPosition = function(successCB, errorCB, timeoutCB, timeoutThreshold, options){
var successHandler = successCB;
var errorHandler = errorCB;
window.geolocationTimeoutHandler = function(){
timeoutCB();
}
if(typeof(geolocationRequestTimeoutHandler) != 'undefined'){
clearTimeout(window['geolocationRequestTimeoutHandler']);//clear any previous timers
}
var timeout = timeoutThreshold || 30000;//30 seconds
window['geolocationRequestTimeoutHandler'] = setTimeout('geolocationTimeoutHandler()', timeout);//set timeout handler
navigator.geolocation.getCurrentPosition(
function(position){
clearTimeout(window['geolocationRequestTimeoutHandler']);
successHandler(position);
},
function(error){
clearTimeout(window['geolocationRequestTimeoutHandler']);
errorHandler(error);
},
options
);
};
function timeoutCallback(){
alert('Hi there! we are trying to locate you but you have not answered the security question yet.\n\nPlease choose "Share My Location" to enable us to find you.');
}
function successCallback(position){
var msg = '';
msg += 'Success! you are at: ';
msg += '\nLatitude: ' + position.coords.latitude;
msg += '\nLongitude: ' + position.coords.longitude;
msg += '\nAltitude: ' + position.coords.altitude;
msg += '\nAccuracy: ' + position.coords.accuracy;
msg += '\nHeading: ' + position.coords.heading;
msg += '\nSpeed: ' + position.coords.speed;
alert(msg);
}
function errorCallback(error){
if(error.PERMISSION_DENIED){
alert("User denied access!");
} else if(error.POSITION_UNAVAILABLE){
alert("You must be hiding in Area 51!");
} else if(error.TIMEOUT){
alert("hmmm we timed out trying to find where you are hiding!");
}
}
navigator.geolocation.requestCurrentPosition(successCallback, errorCallback, timeoutCallback, 7000, {maximumAge:10000, timeout:0});

这个概念是先设置一个定时器(如果不设置则默认为 30 秒)。如果用户在计时器到期之前未执行任何操作,则会调用 timeoutCallback。

注意事项:

  1. 某些用户界面(例如 iPhone/iPad/iPod Safari)可能会出现允许/拒绝提示模式 - 因此用户在选择某些内容之前无法真正继续(我建议不要管这些用户,让默认用户界面处理事情
  2. 如果用户允许请求(延迟),超时可能仍会在响应返回之前触发 - 我认为您对此无能为力
  3. 上面的代码只是一个例子……它需要清理。

关于html - 接受请求时的地理位置反馈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4736057/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com