1

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 の要素が body にあります。

4

1 に答える 1

2

あなたはおそらくFFで起動しないことに気づいているでしょう。なぜなら、彼らは「今ではありません」がエラーを発生させるべきものではないと考えているからです。仕方"):

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

しかし

Timeout は、 の options 引数 (オプションの 3 番目の引数) の受け入れ可能なプロパティですnavigator.geolocation.getCurrentPosition。これnavigator.geolocation.getCurrentPosition(showPosition, showError, {timeout:8000});は、8 秒間の「非アクティブ」の後に到達する方法です。これはshowError、Firefox の場合、「明示的に「はい」または「まったく応答しない」ことを意味します。

PS - 質問と回答:ユーザーが Firefox で地理位置情報を共有することを拒否した場合、関数の失敗は呼び出されません

于 2013-08-08T04:25:26.333 に答える