如果 JavaScript geolocation pup-up 没有被用户回答,如何继续执行代码?

How to continue code execution if JavaScript geolocation pup-up is not answered by user?

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

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

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

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 设置为真,以便在 5001 毫秒后,超时不会第二次调用它。