位置情報 API
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
安全なコンテキスト用: この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。
位置情報 API (Geolocation API) を使用すると、ユーザーが望む場合に、自分の位置情報をウェブアプリケーションに提供することができます。プライバシー上の理由から、ユーザーは位置情報を報告する許可を求められます。
WebExtension で Geolocation オブジェクトを使用するには、マニフェストに "geolocation" パーミッションを追加しなければなりません。ユーザーのオペレーティングシステムは、最初に要求されたときに位置情報へのアクセスを許可するようにユーザーに促します。
概念と使用方法
ウェブアプリでユーザーの位置情報を取得したいと思うことはよくあります。例えば、ユーザーの位置を地図上にプロットしたり、ユーザーの位置に関連するパーソナライズされた情報を表示したりすることができます。
位置情報 APIは navigator.geolocation への呼び出しを介してアクセスします。これにより、ブラウザーはユーザーに自分の位置情報にアクセスする許可を要求します。ユーザーが許可すると、ブラウザーは端末上で利用可能な最良の機能(GPS など)を使用してこの情報にアクセスします。
開発者は、いくつかの異なる方法でこの位置情報にアクセスできるようになりました。
Geolocation.getCurrentPosition(): 端末の現在の位置を受け取ります。Geolocation.watchPosition(): 端末の位置が変化するごとに自動的に呼び出され、更新された位置情報を返すハンドラー関数を登録します。
どちらの場合も、メソッド呼び出しには最大 3 つの引数を取ります。
- 成功コールバック(必須): 位置情報の取得に成功した場合、このコールバックが
GeolocationPositionオブジェクトを唯一の引数として実行され、位置情報へのアクセスを提供します。 - エラーコールバック(オプション): 位置情報の検索に失敗した場合、このコールバックが
GeolocationPositionErrorオブジェクトを唯一の引数として実行され、何が問題となったかに関するアクセス情報を提供します。 - 位置データを取得するためのオプションを提供するオプションのオブジェクト。
位置情報の使用に関するさらなる情報は、位置情報 API の使用を参照してください。
インターフェイス
Geolocation-
この API のメインクラスです。ユーザーの現在位置の取得、位置の変化の監視、および以前に設定した管理のクリアを行うメソッドが含まれています。
GeolocationPosition-
ユーザーの位置を表します。
GeolocationPositionインスタンスは、Geolocationに含まれるメソッドのいずれかの呼び出しが成功した場合に、成功コールバックの内部で返され、タイムスタンプとGeolocationCoordinatesオブジェクトのインスタンスが含まれます。 GeolocationCoordinates-
ユーザーの位置の座標を表します。
GeolocationCoordinatesのインスタンスには、緯度、経度、その他の重要な関連情報が含まれています。 GeolocationPositionError-
GeolocationPositionErrorは、Geolocationに含まれるメソッドのいずれかの呼び出しに失敗した場合、エラーコールバック内で返され、エラーコードとメッセージが含まれています。
他のインターフェイスへの拡張
-
API のエントリーポイント。
Geolocationオブジェクトのインスタンスを返し、そこから他のすべての機能にアクセスすることができます。
セキュリティの考慮事項
Geolocation API を使用すると、保護されたコンテキスト内でユーザーがプログラムによって位置情報にアクセスすることができるようになります。
アクセスはさらに権限ポリシーディレクティブの geolocation によって制御されます。
geolocation のデフォルト許可リストは self であり、同一オリジンのネストされたフレーム内でのみ位置情報にアクセスするその権限を許可します。
サードパーティの利用を許可するには、 Permissions-Policy レスポンスヘッダーを設定して、特定のサードパーティオリジンへ権限を与えます。
Permissions-Policy: geolocation=(self b.example.com)
それから、そのオリジンからのソースの iframe 要素に allow="geolocation" 属性を追加する必要があります。
<iframe src="https://b.example.com" allow="geolocation"></iframe>
位置情報データは、その端末の所有者が共有したくない情報があることがあり、それを明らかにする可能性があります。
したがって、Geolocation.getCurrentPosition() または Geolocation.watchPosition() が呼び出される際には、ユーザーが明示的なその権限をプロンプト経由で許可しなければなりません(その権限の状態が既に granted または denied である場合を除く)。
許可されたその権限の有効期間はユーザーエージェントによって異なり、時間ベース、セッションベース、あるいは永続的であることがあります。
権限 API の geolocation 権限を使用することができます。これにより、位置情報を使用する際のアクセスが granted(許可済み)、denied(拒否済み)、または prompt(プロンプト表示が必要)のいずれであるかを検査することができます。
例
例については位置情報 API の使用を参照してください。
仕様書
| Specification |
|---|
| Geolocation> # geolocation_interface> |
ブラウザーの互換性
可用性
Wi-Fi ベースの測位は Google が提供することが多いため、中国ではバニラの位置情報 API が利用できない場合があります。 Baidu, Autonavi, Tencent などの地域ののサードパーティプロバイダーを使用することができます。これらのサービスは、ユーザーの IP アドレスやローカルアプリを使用して、より高度な位置情報を提供します。
関連情報
- 位置情報 API の使用
- Who moved my geolocation? (Hacks blog)