根据地理位置权限更改 HTML 元素的可见性 [重复]

Posted

技术标签:

【中文标题】根据地理位置权限更改 HTML 元素的可见性 [重复]【英文标题】:Changing visibility of HTML elements based on geolocation permission [duplicate] 【发布时间】:2019-02-26 22:23:43 【问题描述】:

如果最终用户不同意让浏览器知道他们的位置,我正在尝试使 html 元素可见。但是,当拒绝浏览器的请求时,我当前的代码不起作用(console log 也不起作用)。但是当允许浏览器访问我的位置时,对 Google Places 的 API 调用有效。

总结一下:如果用户拒绝浏览器的请求,我希望geolocationunavailvisibilityvisible,而不是hidden

HTML

<div id="geolocationunavail"> 
    <p>Don't want to share your location?</p>
    <p><span>That's cool.</span> Type a location below.</p>
</div>

CSS

#geolocationunavail 
    visibility: hidden;

JS

function getUserLocation() 
    if(navigator.geolocation)
        navigator.geolocation.getCurrentPosition(function(position) 
            document.querySelector("#longitude").value = position.coords.longitude;
            document.querySelector("#latitude").value = position.coords.latitude;
            var lng = position.coords.longitude;
            var lat = position.coords.latitude; 
            var latlng = new google.maps.LatLng(lat, lng);
            var geocoder = new google.maps.Geocoder();
            geocoder.geocode( 'latLng': latlng , function (results, status) 
                if (status !== google.maps.GeocoderStatus.OK) 
                    alert(status);
                
                if (status == google.maps.GeocoderStatus.OK) 
                    console.log(results);
                    var address = (results[0].formatted_address);
                    document.querySelector("#citysearch").value = address;
                
            );
        );
     else 
        console.log("Geolocation is not supported by this browser.");
        document.getElementById("geolocationunavail").style.display = "visible";
    

【问题讨论】:

【参考方案1】:

看起来你有两个不同的问题,所以我会同时解决它们:

首先,您的地理定位功能未按预期工作。发生这种情况是因为您没有正确使用该功能。您不希望使用 else 语句说地理位置不起作用,因为地理位置将始终“起作用”,因为无论用户输入如何,它都会成功调用。即使用户选择“阻止”该功能在技术上“有效”,因此也不会运行 else 语句。

其次,您的可见性切换不正确。有两种方法可以解决此问题。您可以将其设为类并使用classList.toggle("myClass"),也可以使用document.getElementById('geolocationunavil').style.visibility = 'visible';

这两者放在一起将导致:

function getUserLocation() 
navigator.geolocation.getCurrentPosition(
    position => 
        document.querySelector("#longitude").value = position.coords.longitude;
        document.querySelector("#latitude").value = position.coords.latitude;
        var lng = position.coords.longitude;
        var lat = position.coords.latitude; 
        var latlng = new google.maps.LatLng(lat, lng);
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( 'latLng': latlng , function (results, status) 
            if (status !== google.maps.GeocoderStatus.OK) 
                alert(status);
            
            if (status == google.maps.GeocoderStatus.OK) 
                console.log(results);
                var address = (results[0].formatted_address);
                document.querySelector("#citysearch").value = address;
            
        );
    ,
    err => 
        console.log("Geolocation is not supported by this browser.");
        document.getElementById("geolocationunavail").style.visibility = "visible";
    )

【讨论】:

以上是关于根据地理位置权限更改 HTML 元素的可见性 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Safari 中提交表单之前更改元素可见性有时不起作用

如果在 jQuery 中不显示,则更改另一个元素的可见性

根据选择框更改 DIV 可见性

markdown 根据序列步骤更改窗口小部件可见性

markdown 根据序列步骤更改窗口小部件可见性

markdown 根据序列步骤更改窗口小部件可见性