首页 > 解决方案 > 如果用户未回答 JavaScript 地理定位小狗,如何继续执行代码?

问题描述

我们有一个网页,在注册时询问用户的地理位置。

网页使用navigator.geolocation.getCurrentPosition( ... ).

但是,我们观察到在某些计算机(带有 Chrome 或 Edge 的 Windows 10)上,没有显示请求用户“允许”或“拒绝”位置请求的弹出窗口。我们还发现,如果用户调整大小或移动浏览器窗口,就会出现弹窗,并且可以回答。但是,如果弹出窗口没有得到响应,代码将停留在等待用户操作。我想知道如果用户在某个时间没有回答,是否有办法继续执行代码。这就像一个弹出超时。超时后,我可以简单地假设用户拒绝了位置请求。无论如何,我们必须让我们的网站继续执行代码,即使弹出窗口从未被回答。

getCurrentPosition(success callback, errorCallback, {timeout: 5000})在这种情况下不起作用。该超时是指用户允许地理定位但过程超时的情况。

标签: javascripthtmlbrowsergeolocation

解决方案


试试这个

// 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 毫秒后,超时不会第二次调用它。


推荐阅读