0

我有 2 个 js 文件,1 个是将位置数据存储在一个对象中,另一个是单击事件等的事件处理程序。

这有效:

var Geology = {
    coords: {},
    error: '',
    setPosition: function (position) {
        Geology.coords = position.coords;
        // DEBUG
        for (var prop in Geology.coords)
            console.log(prop + ': ' + Geology.coords[prop]);
    },
    setError: function (error) {
        Geology.error = error;
    }
};

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(Geology.setPosition,Geology.setError,{timeout:10000});
}

但我希望能够在必要时通过点击或计时器更新位置数据。每当我尝试这样做时,它都不会像最初那样将变量分配给 Geology。

像这样:

jQuery(document).ready(function($){
    $('.toggle').click(function(){
        //- get geo location if available
        if (typeof Geology === 'object') {
            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(Geology.setPosition,Geology.setError,{timeout:10000});
            }
        }
    });
});

我在控制台中没有收到错误,但它只是失败并且不运行回调。但是,它确实运行 getCurrentPosition 方法,因为我已经测试过它是否能够通过条件。

4

1 回答 1

1

我认为您需要设置maximum_age参数,否则结果将被永久缓存:

navigator.geolocation.getCurrentPosition( 
      geo_success, 
      geo_error, 
      { maximumAge:60000 } // set to 1min (in ms)
);

您还有两个其他参数:enableHighAccuracytimeout

更多信息:https ://developer.mozilla.org/en-US/docs/Using_geolocation

编辑:我刚发现这个,它可能与您的问题有关navigator.geolocation.getCurrentPosition 有时有效,有时无效

于 2013-01-15T04:13:53.780 回答