ChromeでHTML5 Geolocationのタイムアウト時にコールバックが呼ばれない問題の対処法
ChromeにおけるGeolocation APIのタイムアウト問題
HTML5のGeolocation APIを使って位置情報を取得する際、Google Chromeではタイムアウトが発生してもerrorCallback(エラーコールバック)が呼ばれないという挙動が確認されています。仕様上はtimeoutオプションを指定すれば、指定時間内に位置情報が取得できなかった場合にエラーコールバックが実行されるはずですが、Chromeではこれが機能しないケースがあります。
この問題に対する回避策として、コールバックが実行されたかどうかをフラグで管理し、別途setTimeoutで監視する方法があります。以下にその実装例を示します。
回避策のコード例
_callback = false;
function successCallback(position) {
_callback = true;
console.log('success');
}
function errorCallback(error) {
_callback = true;
alert('error');
}
// コールバックが一定時間内に呼ばれなかった場合を検知
setTimeout(function(){
if(!_callback) console.log('ignored');
}, 20000);
navigator.geolocation.getCurrentPosition(
successCallback,
errorCallback,
{timeout: 2000}
);コードの解説
このコードのポイントは以下の通りです。
- フラグ変数
_callback:成功・失敗どちらのコールバックが実行されてもtrueにセットされます。 setTimeoutによる監視:20秒後にフラグを確認し、まだfalseのまま(=どちらのコールバックも呼ばれていない)であれば、リクエストが無視されたものとして処理します。timeout: 2000:Geolocation API自体には2秒のタイムアウトを指定していますが、Chromeがこれを無視する場合でも、外側のsetTimeoutがフォールバックとして機能します。
このように、API側のタイムアウト設定だけに頼らず、アプリケーション側で独自のタイムアウト処理を実装しておくことで、Chromeを含むさまざまなブラウザ環境でも安定した動作を実現できます。
-
Chrome Canary(カナリア)とは?安全性や使い方を徹底解説
Google Chromeは、世界中で何億人ものアクティブユーザーを持つブラウザであり、新機能やバグ修正は一般公開前に厳しいテストを経てリリースされます。もし標準版のChromeユーザーよりも先にこれらの機能や修正を試してみたいなら、最先端バージョンである「Google Chrome Canary」への切り替えがおすすめです。 Google Chromeには、Stable(安定版)、Beta、Dev、Canaryの4つのリリースチャンネルが用意されています。Canaryはその中でも最も実験的なチャンネルで、限られたユーザー層(主に開発者やテスター)に新機能を試してもらい、バグや問題を報告して
-
Chrome と Edge で RESULT_CODE_HUNG を修正
複数のブラウザーがインターネット ドメインの拠点を占めていますが、Google Chrome と Microsoft Edge はそのリストの中で際立っています。 Chrome は世界中の何百万人ものユーザーにとって頼りになる選択肢ですが、私の数人の Windows ユーザーには Edge が好まれています。しかし、これらの優れたブラウザーにもいくつかの欠陥があります。ユーザーは、インターネット サーフィン中にいくつかのよくあるエラーに気を取られることがよくあります。そのようなよくあるエラーの 1 つに Aw Snap! RESULT_CODE_HUNG . Chrome、Edge、Brave