Edgeで位置情報取得時にエラーコールバックが実行されないバグ
MicrosoftEdgeで位置情報の取得できないデスクトップPCなどで位置情報を取得するときにエラーコールバックが実行されません。
検証ブラウザ:Microsoft Edge(64bit) 20.10240.16384.0
window.navigator.geolocation.getCurrentPosition(callback,callback);
// コールバックがいつまで待っても実行されない
また、タイムアウト設定も効きません。また、watchPositionを使用した場合も同様です。
window.navigator.geolocation.watchPosition(callback,callback, {
timeout: 1000
});
// コールバックがいつまで待っても実行されない
Microsoftのページで紹介されているコードでも再現します
現在位置の取得 (Windows)
回避方法
getCurrentPosition()
またはwatchPosition()
が2回目以降の呼び出しであれば、タイムアウト設定が有効になります。
タイムアウト以外でエラーコールバックが実行される方法は見つけられませんでしたが、ひとまずタイムアウトが有効になるようにして、位置情報取得時には必ずタイムアウト時間を設定してあげるのがよさそうです。
1番最初に無駄にgetCurrentPosition()
を呼んで、以降はタイムアウトを必ず設定して呼ぶようにすれば大丈夫です。
// Edgeのgeolocationバグ回避サンプル
// 1回無駄に呼んでおく
navigator.geolocation.getCurrentPosition($.noop, $.noop);
$('btn').click(function(){
navigator.geolocation.getCurrentPosition(successCallback, errorCallback, {
timeout: 10000
});
});
位置情報取得成功時について
手元に位置情報取得できるWindows10が無いので未検証です。またEdgeの開発者ツールでGPSのシミュレートを有効にしても位置情報取得できませんでした。