javascript - 如果用户未回答 JavaScript 地理定位小狗,如何继续执行代码?
问题描述
我们有一个网页,在注册时询问用户的地理位置。
网页使用navigator.geolocation.getCurrentPosition( ... )
.
但是,我们观察到在某些计算机(带有 Chrome 或 Edge 的 Windows 10)上,没有显示请求用户“允许”或“拒绝”位置请求的弹出窗口。我们还发现,如果用户调整大小或移动浏览器窗口,就会出现弹窗,并且可以回答。但是,如果弹出窗口没有得到响应,代码将停留在等待用户操作。我想知道如果用户在某个时间没有回答,是否有办法继续执行代码。这就像一个弹出超时。超时后,我可以简单地假设用户拒绝了位置请求。无论如何,我们必须让我们的网站继续执行代码,即使弹出窗口从未被回答。
getCurrentPosition(success callback, errorCallback, {timeout: 5000})
在这种情况下不起作用。该超时是指用户允许地理定位但过程超时的情况。
解决方案
试试这个
// this flag is to only call errorCallback if getCurrentPosition never calls the callback functions
var geolocationRequestCompleted = false;
getCurrentPosition(succesCallback, errorCallback, {timeout: 5000})
setTimeout(function () {
if (!geolocationRequestCompleted) {
errorCallback()
}
}, 5001)
这样,如果在 5001 毫秒后没有调用回调(成功或错误),您将强制 errorCallback() 并且应用程序可以继续。如果 errorCallback 或 successCallback 被调用,则该标志geolocationRequestCompleted
需要设置为 true,以便在 5001 毫秒后,超时不会第二次调用它。
推荐阅读
- mongodb - 我需要从 mongoDB 中预先存在的模式中获取数据并创建一个 API
- c# - 如何在WPF ListView中绑定某列的背景颜色?
- oracle - Oracle Apex:如何在过滤器中放置动态值
- amazon-web-services - 仅在数据更新时运行粘合作业
- python - 重载方法并调用super
- json - 在打字稿中使用 & 运算符
- reactjs - 自动建议不立即显示项目
- ios - 在 SwiftUI PreviewProvider 中更改模型视图状态
- python-2.7 - 无法在 frolvlad/alpine-python2 docker 映像上安装 tensorflow
- python - 在 pandas 数据框中有效地迭代多个系列