【问题标题】:navigator.geolocation.getCurrentPosition not working in Windows Phone 8.1navigator.geolocation.getCurrentPosition 在 Windows Phone 8.1 中不起作用
【发布时间】:2015-08-17 12:02:03
【问题描述】:

我正在尝试使用 Cordova/PhoneGap 获取当前的经度和纬度。但是我在 fail 功能上遇到了这个错误:

位置检索超时。

我已将 maximumAge 设置为 5000,将 timeout 设置为 10000。

这是我正在使用的 Cordova 代码 sn-p:

getCurrentPosition:function(successCallback, errorCallback, options) {

    argscheck.checkArgs('fFO', 'geolocation.getCurrentPosition', arguments);
    options = parseParameters(options);

    var timeoutTimer = {timer:null};

    var win = function(p) {
        clearTimeout(timeoutTimer.timer);
        if (!(timeoutTimer.timer)) {

            return;
        }
        var pos = new Position(
            {
                latitude:p.latitude,
                longitude:p.longitude,
                altitude:p.altitude,
                accuracy:p.accuracy,
                heading:p.heading,
                velocity:p.velocity,
                altitudeAccuracy:p.altitudeAccuracy
            },
            (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp)))
        );
        geolocation.lastPosition = pos;
        successCallback(pos);
    };
    var fail = function(e) {
        clearTimeout(timeoutTimer.timer);
        timeoutTimer.timer = null;
        var err = new PositionError(e.code, e.message);
        if (errorCallback) {
            errorCallback(err);
        }
    };

    if (geolocation.lastPosition && options.maximumAge && (((new Date()).getTime() - geolocation.lastPosition.timestamp.getTime()) <= options.maximumAge)) {
        successCallback(geolocation.lastPosition);
      } else if (options.timeout === 0) {
        fail({
            code:PositionError.TIMEOUT,
            message:"timeout value in PositionOptions set to 0 and no cached Position object available, or cached Position object's age exceeds provided PositionOptions' maximumAge parameter."
        });

    } else {
        if (options.timeout !== Infinity) {
            timeoutTimer.timer = createTimeout(fail, options.timeout);
        } else {
            timeoutTimer.timer = true;
        }
        exec(win, fail, "Geolocation", "getLocation", [options.enableHighAccuracy, options.maximumAge]);
    }
    return timeoutTimer;
},

一切似乎都很好。但它不调用 successCallback 函数。我不知道我做错了什么。

【问题讨论】:

    标签: javascript windows cordova windows-phone-8.1 phonegap-plugins


    【解决方案1】:

    我不知道你是否解决了这个问题,也看不到你将哪些选项发送到 getCurrentPosition 方法,但我使用这些选项使它在 wp8.1 上工作:

    {
        timeout: 20000,
        enableHighAccuracy: true,
        maximumAge: 90000
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多