JavaScript
HTML5
IE11
Windows10
Geolocation

Windows10のIE11.5ではGeolocation APIのgetCurrentPositionが初回しか成功しない

現象

IE11.5ではgetCurrentPositionが2回目以降は必ず
alert(error.message + "[" + error.code + "]");
が「現在地を特定できませんでした。[2]」となる。

version.jpg

対応方法

オプション設定のmaximumAgeを大きく設定すればキャッシュを使うのでその間は失敗にはならないが、
他ブラウザの際にはキャッシュを使いたくない(常に最新の位置が欲しい)かもしれないのでキャッシュを使わない設定で回避してみた
(監視が動くまでは前回の位置情報だけど・・・)

var _tempWatchID = null;
var _tempPosition = null;
var _lockFlag = false;

// 監視開始
function startLocationWatch() {

    if (_lockFlag === true) {
        return;
    } 

    if (_tempWatchID !== null) {
        return;
    }

    _lockFlag = true;

    navigator.geolocation.getCurrentPosition(
        function(position) {
            monitorLocationInfo(position);
            _lockFlag = false;
        },
        function (error) {
            console.log("error");
            if(_tempPosition !== null) {
                monitorLocationInfo(_tempPosition);
                _lockFlag = false;
                return;
            }
            alert(error.message + "[" + error.code + "]");
            _lockFlag = false;
        },
        { enableHighAccuracy: false, maximumAge: 0, timeout: 10000 }
    );
}

function monitorLocationInfo(position) {
    _tempPosition = position;
    console.log("緯度 : " + position.coords.latitude);
    console.log("経度 : " + position.coords.longitude);
    console.log("GPS誤差 : " + position.coords.accuracy + "m");

    // 監視(デバイスの位置が変化するたびに自動的に呼び出される)
    _tempWatchID = navigator.geolocation.watchPosition(function (position) {
        _tempPosition = position;
        console.log("緯度(監視) : " + position.coords.latitude);
        console.log("経度(監視) : " + position.coords.longitude);
        console.log("GPS誤差(監視) : " + position.coords.accuracy + "m");
    });
}

// 監視停止
function stopLocationWatch() {
    if (_tempWatchID === null) {
        return;
    }
    navigator.geolocation.clearWatch(_tempWatchID);
    _tempWatchID = null;
};

IE11でGeolocation APIを使う際の注意

error.codeが1になる場合は位置情報を使用する許可が出来ていないので
Windowsの設定>プライバシー>位置情報から位置情報サービスをONに設定する必要があります。
Chrome等では設定せずとも問題なく動作します。

location_permission.jpg