1

ページに Google Maps Javascript API v3 があり、ジオコーディング ライブラリを使用しています: https://developers.google.com/maps/documentation/javascript/geocoding

コード 私のgoogle.maps.Geocoder.geocodeコールバック関数では、緯度経度を JSON として Chrome ブラウザーに次のwindow.localStorageように保存しています。

if (localStorage.getItem('geocode:'+job.url) === null) {
    geocoder.geocode({'address': job.address}, function(results, status) {
        var json = JSON.stringify({
            address: job.address,
            lat: results[0].geometry.location.lat(),
            lng: results[0].geometry.location.lng()
        });
        console.log('Set key:"geocode:'+job.url+'", value: '+json);
        localStorage.setItem('geocode:'+job.url, json);
        console.log('Get key:"geocode:'+job.url+'", value: '+localStorage.getItem('geocode:'+job.url));
    });
}

問題は、キーがコールバック関数の外で null に設定されていることです。上記のコードを実行して 2 つのログ メッセージを出力した後、コンソールに次のように入力すると、問題が表示されます。

> localStorage.length;
  1
> localStorage.key(0);
  "geocode:123 street San Francisco CA USA"
> localStorage.getItem("geocode:123 street San Francisco CA USA");
  null

localStorage キーのプレフィックスを 'blah:' に変更すると、問題が解決します!

これは、Google マップ Javascript API v3 ジオコーディング ライブラリが、コールバック関数が返された後、localStorage キーを接頭辞「geocode:」で上書きするということですか?

追加の背景情報:

次のような Chrome 拡張機能の URL から、このスクリプト コードをページに含めています。

<script src="chrome:///blah" type="text/javascript"></script>

への呼び出しgoogle.maps.Geocoder.geocodeとコールバック関数は、window.setTimeoutハンドラーから呼び出されます。

4

0 に答える 0