0

Gmaps と一緒に HTML5 地理位置情報関数を構築しています。

ユーザーの承認がジオロケートされるのを待っているときに、小さな問題が発生します。ユーザーは、ブラウザから、ジオロケートされるかどうかを尋ねられます。彼が [はい] をクリックすると、地理位置情報が表示されますが、gmap はトリガーされず、マップは画面に表示されません。その後、彼がそれをリフレッシュすると、すべてが正常に機能します。これは特に携帯電話で発生します。

地理位置情報を処理するときにコードの一部を提供します。

    <script>
    // <!-- GOOGLE MAPS & POSITION -->

    var radius = 1;
    var map;
    var position;

    jQuery(window).ready(function(){ 
        //If we click on Find me Lakes
        jQuery("#btnInit").click(initiate_geolocation);
        initiate_geolocation();

        $('#radius').change(function(v){
            handle_geolocation_query(position);
        });
    });

    function initiate_geolocation() { 
        if (navigator.geolocation)  
        {  
            var script = document.createElement("script");
            script.type = "text/javascript";
            script.src = "https://maps.googleapis.com/maps/api/js?key=AIzaSyBbfJJVh0jL1X9b7XFDcPuV7nHD1HlfsKs&sensor=true&callback=initialize";
            document.body.appendChild(script);
            navigator.geolocation.getCurrentPosition(append_google_map, handle_errors);
        }  
        else  
        {  
            yqlgeo.get('visitor', normalize_yql_response);
        }  
    }

    function handle_errors(error)  
    {  
        switch(error.code)  
        {  
            case error.PERMISSION_DENIED: alert("user did not share geolocation data");  
            break;  
            case error.POSITION_UNAVAILABLE: alert("could not detect current position");  
            break;  
            case error.TIMEOUT: alert("retrieving position timedout");  
            break;  
            default: alert("unknown error");  
            break;  
        }  
    }  

    function append_google_map(pos){ 

        position = pos;

        var mapOptions = {
            zoom: 15,
            center: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
            streetViewControl: false,
            mapTypeId : google.maps.MapTypeId.ROADMAP
        }

        if (typeof map == 'undefined') { //We make sure the map object hasn't been toogled to the page

            map = new google.maps.Map(document.getElementById("gmap"), mapOptions);

            //$('#gmap').slideToggle('slow');

            setMarkerPosition(position.coords.latitude, position.coords.longitude);

        }

        handle_geolocation_query();
    }

ここでわかるように、エラー コールバックと成功コールバックを使用して、initialize 関数で地理位置情報を開始しています。そのとき、ユーザーの画面にポップアップが表示され、ジオロケーションを承認するかどうか尋ねられます。彼が [はい] をクリックしても、コードの一部がトリガーされていないようです (または、handle_errors dunno にリダイレクトされます)。そのため、マップは画面に表示されません (コード内のコードでもう少し処理されます)。 append_google_map.

なぜこれが起こっているのか、そしてこれをどのように処理するのかを理解するのを手伝ってくれる人はいますか?

どうもありがとう

4

1 に答える 1

1

できません。これはセキュリティ機能です。コードは、ユーザーが自分の場所を共有するかどうかを承認または拒否するまで待機する必要があります。

コードは、ユーザーからの両方の応答に対応できる必要があります。コードを共有しないことを選択した場合は、都市の座標にフォールバックするか、メッセージを表示することができます。

位置情報を共有する理由を説明することを条件に、ページに位置情報を共有するように伝えるメッセージを表示しても問題ありません。

于 2013-07-29T01:17:37.977 に答える