如何使用Gmap在浏览器地理位置中处理用户审批

How to handle user approval in browser geolocation with Gmap?

本文关键字:处理 用户 地理位置 何使用 Gmap 浏览器      更新时间:2023-09-26

我正在构建一个HTML5地理定位函数和Gmap。

在等待用户批准进行地理定位时,我遇到了一个小问题:浏览器会询问用户是否希望进行地理定位。当他点击"是"时,他被地理定位,但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();
    }

正如你在这里看到的,我在initiate函数中用一个错误回调和一个成功回调来启动地理定位。这时,用户的屏幕上会出现一个弹出窗口,询问他是否同意地理定位。即使他单击"是",代码的某些部分似乎也没有被触发(或者我们被重定向到handle_errors dunno),因此,地图不会出现在屏幕上(在append_google_map中的代码中会进一步处理)。

有人能帮我弄清楚为什么会发生这种事,以及如何处理吗?

非常感谢

你不能,这是一个安全功能。您的代码必须等待用户批准或拒绝他们是否要共享自己的位置。

您的代码必须能够对用户的两个响应作出反应。如果他们选择不共享你的代码,你可以尝试回退到城市的坐标,或者显示一些消息。

页面上有一条消息告诉他们分享他们的位置是可以的,前提是你向他们解释他们为什么与你分享他们的地点。