Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@horikeso

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?