错误处理不适用于 Chrome 中的 HTML5 地理位置

Posted

技术标签:

【中文标题】错误处理不适用于 Chrome 中的 HTML5 地理位置【英文标题】:Error handling not working with HTML5 geolocation in Chrome 【发布时间】:2013-08-08 03:53:00 【问题描述】:

我有一个简单的地图,只要它们允许 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);

当然,&lt;p&gt; 元素在正文中,其 id 为 msg。

【问题讨论】:

function fail never called if user declines to share geolocation in firefox的可能重复 【参考方案1】:

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

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

【讨论】:

感谢您的提示。但是,我在 Chrome 中遇到了这个问题。 在 Chrome 中只有两个选项:允许或拒绝。 奇怪,它在 Chrome 中对我有用(Mac - 山狮,Chrome 28.0.1500.95,也是今天早上的 Canary)。您的系统/浏览器的规格是什么? 嗯,这很奇怪。我在 Win 8 Pro 上运行 Chrome 版本 28.0.1500.95 m(不确定这是否与您的相同,或者“m”是否意味着什么)。

以上是关于错误处理不适用于 Chrome 中的 HTML5 地理位置的主要内容,如果未能解决你的问题,请参考以下文章

HTML5 音频播放器适用于 safari/Chrome,但不适用于 iPhone

日期选择器 html5 标记不适用于 Mozilla、IE 浏览器。但它仅适用于 Chrome

处理 Chrome + Backbone 中的网络错误

HTML5 视频自动播放不适用于 slick.js

从 Chrome 文件系统播放视频不适用于 Android

navigator.Geolocation GetCurrentpositon 不适用于 Chrome 和 Firefox