javascript - 错误处理不适用于 Chrome 中的 HTML5 地理定位

标签 javascript html google-maps google-maps-api-3

我有一个简单的 map ,只要他们允许 HTML5 地理定位,它就应该以用户的位置为中心加载。有一个功能可以防止他们不允许我们查看他们的位置,但由于某种原因它不起作用。

代码如下:

 var x = document.getElementById("msg");
    function getLocation() {
        if (Modernizr.geolocation) {
            navigator.geolocation.getCurrentPosition(showPosition, showError);
        }
        else { x.innerHTML = "Geolocation is not supported by this browser."; }
    }
    function showPosition(position) {
        var mapOptions = {
            center: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
            zoom: 10,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("Map"), mapOptions);
        var acOptions = {
            types: ['establishment']
        };
        var autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete'), acOptions);
        autocomplete.bindTo('bounds', map);
        var infoWindow = new google.maps.InfoWindow();
        var marker = new google.maps.Marker({
            map: map
        });
        google.maps.event.addListener(autocomplete, 'place_changed', function () {
            infoWindow.close();
            var place = autocomplete.getPlace();
            if (place.geometry.viewport) {
                map.fitBounds(place.geometry.viewport);
            } else {
                map.setCenter(place.geometry.location);
                map.setZoom(17);
            }
            marker.setPosition(place.geometry.location);
            infoWindow.setContent('<div><strong>' + place.name + '</strong><br />');
            infoWindow.open(map, marker);
            google.maps.event.addListener(marker, 'click', function (e) {
                infoWindow.open(map, marker);
            });
        });
    }

    function showError(error) {
        switch (error.code) {
            case error.PERMISSION_DENIED:
                x.innerHTML = "User denied the request for Geolocation."
                break;
            case error.POSITION_UNAVAILABLE:
                x.innerHTML = "Location information is unavailable."
                break;
            case error.TIMEOUT:
                x.innerHTML = "The request to get user location timed out."
                break;
            default:
                x.innerHTML = "An unknown error occurred."
                break;
        }
    }
    google.maps.event.addDomListener(window, 'load', getLocation);

当然还有 <p>元素在正文中,id 为 msg。

最佳答案

您可能注意到它不会在 FF 中触发,因为他们认为“不是现在”不是应该触发错误的东西 - 请参阅此处(最后的响应是“停止重新打开此bug,我们就是这样设计的”):

https://bugzilla.mozilla.org/show_bug.cgi?id=635175

但是

超时是 navigator.geolocation.getCurrentPosition 的选项参数(可选的第三个参数)的可接受属性。所以 navigator.geolocation.getCurrentPosition(showPosition, showError, {timeout:8000}); 是在“不活动”8 秒后到达 showError 的方式 - 这在firefox 的情况意味着“没有明确回答是或从不”。

PS - 问答:function fail never called if user declines to share geolocation in firefox

关于javascript - 错误处理不适用于 Chrome 中的 HTML5 地理定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18117595/

相关文章:

javascript - 在innerHTML命令之后将JQuery函数重新绑定(bind)到输入字段

javascript - 在 HTML 中实现 JS

php - 如何包含来自破坏元素的文本?

Javascript:检测/防止外部脚本

html - 使用 CSS3 过渡

java - 通过邮政编码查找位置

android - 如何在谷歌地图android中加载KML/KMZ文件?

javascript - 如何一键上传文件

javascript - Three.js Globe 中的 HTML 元素

c# - 使用 Json.Net 解析谷歌地图地理编码 json 对对象的响应