studio.masah.dev

Geo Spoof

ダミーの位置情報を返させるブックマークレット。緯度経度を指定して navigator.geolocation を差し替え、位置情報を使うサイトの挙動を実機ブラウザで確認できます。

下のボタンをブックマークバーにドラッグ&ドロップして登録してね。

geo-spoof← このボタンをブックマークバーへドラッグ
bookmarklet URL

位置情報を使うページを、好きな座標で試すためのブックマークレットです。navigator.geolocation を差し替えて、指定した緯度経度をそのまま返します。

使い方

  1. 位置情報を使うページを開きます
  2. ブックマークバーに登録した「geo-spoof」をクリックすると、右下にパネルが出ます
  3. プリセットを選ぶか、緯度・経度を直接入力します
  4. 「適用」 を押すとダミー座標が有効になります
  5. そのあと、サイト側の「現在地」ボタンを押し直してください

もう一度ブックマークレットをクリックするとパネルが閉じます (ダミー座標は有効なまま)。完全に元へ戻すには 「解除」 を押すか、ページを再読み込みします。

パネルの項目

項目 内容
プリセット 主要駅や海外主要都市。南半球 (シドニー) も入れてあります
緯度 / 経度 直接入力できます。緯度欄に 35.681, 139.767 の形式を貼ると自動で 2 つに分かれます

ヘッダー部分をドラッグするとパネルを動かせます。入力欄で Enter を押すと適用されます。

緯度・経度は localStorage に保存され、次回そのオリジンで開いたときに復元されます。

仕組み

Geolocation.prototype の getCurrentPosition / watchPosition / clearWatch を差し替えています。navigator.geolocation そのものを置き換える方法もありますが、ページが起動時に const geo = navigator.geolocation のように参照を掴んでいると効きません。プロトタイプ側を書き換えるほうが確実です。

navigator.permissions.query({ name: 'geolocation' }) も併せて差し替え、常に許可済みを返します。coords.accuracy は 20m 固定、altitude / heading / speed は null です。

watchPosition の購読は自前で保持しているので、座標を変えて「適用」を押すたびに、登録済みのコールバックへ新しい座標が流れます。地図の追従表示をその場で動かして確認できます。

同一オリジンの <iframe> にも起動時にパッチを撒きます (クロスオリジンには届きません)。