地理定位在 x 次尝试后挂起,在浏览器重新启动后工作

Posted

技术标签:

【中文标题】地理定位在 x 次尝试后挂起,在浏览器重新启动后工作【英文标题】:Geolocation hangs after x attemps, works after browser restart 【发布时间】:2010-12-06 11:39:00 【问题描述】:

我正在编写一个需要获取我的地理位置的脚本。它在大多数情况下都可以工作,但是不时地不获取地理位置,我必须重新启动浏览器才能使其再次工作。这发生在 Safari 和 FF 中(未在 IE 和 Chrome 中测试)。有人知道是什么原因造成的吗?我正在使用“html 5”一书中的这段代码。

<script type="text/javascript">

function loadDemo() 
    if(navigator.geolocation) 
        document.getElementById("status").innerHTML = "HTML5 Geolocation is supported in your browser.";
        navigator.geolocation.getCurrentPosition(updateLocation);
    


function updateLocation(position) 
    var latitude = position.coords.latitude;
    var longitude = position.coords.longitude;

    if (!latitude || !longitude) 
        document.getElementById("status").innerHTML = "HTML5 Geolocation is supported in your browser, but location is currently not available.";
        return;
    

    document.getElementById("latitude").innerHTML = latitude;
    document.getElementById("longitude").innerHTML = longitude;

【问题讨论】:

【参考方案1】:

FF 有时会挂起,不了解 safari。据我所知,它在 IE 中不起作用。到目前为止,它似乎在 Chrome 中运行良好。 您可以通过设置超时来“解决”这个问题。它仍然不起作用,但至少脚本会在一段时间后终止。我使用此代码。 如果您找到了好的解决方法,请告诉我。

    navigator.geolocation.getCurrentPosition(
        function(position) 
            //succes handler
        ,
        function errorCallback(error) 
            //error handler
        ,
        
            enableHighAccuracy:false,
            maximumAge:Infinity,
            timeout:5000
        
    );

【讨论】:

我在 PC 上的 Chrome 和 android 浏览器中都遇到了这个问题,添加这个 sn-p 使代码完全停止挂起,即使我将超时更改为 10000 毫秒。我相信这与maxiumumAge有关。对我来说不幸的是,我的 html5 应用程序必须准确地跟踪用户的位置,所以我不能将 maximumAge 设置为无穷大。我用 enableHighAccuracy:true, maximumAge:0, timeout: 10000 再次尝试了这个,它仍然在愉快地搅拌。我相信简单地为这些参数提供值会以某种方式阻止它锁定。

以上是关于地理定位在 x 次尝试后挂起,在浏览器重新启动后工作的主要内容,如果未能解决你的问题,请参考以下文章

iOS cordova应用程序在启动屏幕后挂起

node.js http.get 在向远程站点发出 5 次请求后挂起

Chrome 在传输一定数量的数据后挂起 - 等待可用的套接字

cURL PHP 在收到标头后挂起

database/sql rows.scan 在 350K 行后挂起

.NET Core Windows 服务中的并行任务在几秒钟后挂起