4

現在のユーザーの郵便番号を表示する次の JS があります#zip

(function ($, geolocation) {
    if (geolocation) {
        geolocation.getCurrentPosition(function (position) {
            $.getJSON(
                "http://ws.geonames.org/findNearestAddressJSON?callback=?",
                {
                    lat : position.coords.latitude,
                    lng : position.coords.longitude
                },
                function (data) {
                    $(function () {
                        $('#zip').text(data.address.postalcode);
                    });
                }
            );
        });
    }
}(jQuery, navigator.geolocation));

ページをリロードする JS 関数もあります。

$('.reload').click(function(){
    window.location.reload(true);
});

Mobile Safari では、これら 2 つの機能がうまく連携します。ユーザーが Web ページを開くと、ユーザーの現在の郵便番号が読み込まれます。次に、ユーザーが場所を変更した場合、ユーザーはボタンをタップしてページをリロードできます。が存在する場合を除いて、これは正常に機能し<meta name="apple-mobile-web-app-capable" content="yes">ます。

存在する場合、次のことが起こります。

  1. ユーザーがホーム画面のアイコンをタップします
  2. <meta name="apple-mobile-web-app-capable" content="yes">これと同様に、アドレスバーが非表示になっている Web ページが開きます。
  3. 郵便番号は正常に読み込まれます
  4. ユーザーが場所を移動し、再読み込みボタンをタップします
  5. ページに郵便番号が表示されず、コンソールにエラーが記録されない

私はこれを修正する方法に本当にこだわっていますが、これがまったく役立つ場合は、ここに実際の例があります:

http://www.codekraken.com/testing/zipper/zip.html

4

3 に答える 3

4

全画面表示の Web アプリではリロードされません (apple-mobile-web-app-capable を使用)。ただし、ユーザーが場所を変更してアプリを再度実行すると、常にページが読み込まれます。reload イベントは発生しませんが、実行されるたびに onload イベントが発生します。

ユーザーがアプリを実行したまま場所を変更した場合は、コードを再実行して現在の場所と郵便番号を見つける単純な「もう一度検索」機能が必要になります。

今-ここにキャッチがあります!iOS では、新しい場所のみを使用するように指示した場合でも、位置がキャッシュされることが多いため、古い場所を取得することがあります。非常によく似たインターフェースを使用する getAccurateCurrentLocation() と呼ばれる回避策を作成しました。コードはhttps://github.com/gwilson/getAccurateCurrentPositionで見つけることができます- getCurrentPosition() の代わりにドロップインするのは非常に簡単です。

それはそれを行う必要があります。

于 2012-08-16T21:04:38.487 に答える
0

他の誰かが (私のように) 混乱した場合に備えて、ここで使用するメソッドは、ジオロケーション オブジェクトのネイティブな「watchPosition」メソッドです。

WatchPosition MDN 仕様

ユーザーが場所を移動すると、watchPosition メソッドが呼び出され、緯度/経度から zip ジェネレーターをコールバックとして指定できます。

仕様から:

    var watchID = navigator.geolocation.watchPosition(function(position) {
        do_something(position.coords.latitude, position.coords.longitude);
    });

あなたができるように見えます:

    var watchID = navigator.geolocation.watchPosition(function(position) {
        $.getJSON(
            "http://ws.geonames.org/findNearestAddressJSON?callback=?",
            {
                lat : position.coords.latitude,
                lng : position.coords.longitude
            },
            function (data) {
                $(function () {
                    $('#zip').text(data.address.postalcode);
                });
            }
        );
    });

これにより、さらにシンプルになります。ユーザーは場所のボタンをタップする必要はありません。ユーザーが移動すると、場所は既に更新されているはずです。

明確にするために、Greg の関数はこの watchPosition メソッドを使用していますが、何が機能しているかを理解したい場合、またはよりスリムなネイティブ コードを使用して自分でカスタマイズしたい場合は、watchPosition がツールです。

于 2013-02-06T20:26:39.237 に答える