【问题标题】:Is there a way of detecting whether a user has already given permission to use navigator.geolocation?有没有办法检测用户是否已经授予使用 navigator.geolocation 的权限?
【发布时间】:2013-05-08 09:15:46
【问题描述】:

除了第一次设置cookie之外,有没有办法检测用户是否已经允许navigator.geolocation返回浏览器的纬度/经度?

如果有,它是什么?它在所有浏览器中都相同还是在所有浏览器中不同?

这个主题是partially answered elsewhere

根据GeoLocation API – Chrome / Safari – Permission management and Visual Differences,Chrome 请求一个可撤销的一次性权限。我还没有读完这篇文章,但似乎权限存储并不是纯 Chrome 要做的事情。

【问题讨论】:

    标签: html cross-browser geolocation user-permissions w3c-geolocation


    【解决方案1】:

    如何使用所有html5浏览器(支持geoLocation)都应该支持的localStorage

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(successFunction, errorFunction);
    } 
    //Get latitude and longitude;
    function successFunction(position) {
        var lat = position.coords.latitude;
        var long = position.coords.longitude;
    
        localStorage['authorizedGeoLocation'] = 1;
    }
    
    function errorFunction(){
        localStorage['authorizedGeoLocation'] = 0;
    }
    
    function checkauthorizedGeoLocation(){ // you can use this function to know if geoLocation was previously allowed
        if(typeof localStorage['authorizedGeoLocation'] == "undefined" || localStorage['authorizedGeoLocation'] == "0" ) 
            return false;
        else 
            return true;
    }
    

    然后您使用以下功能进行检查:

    alert(checkauthorizedGeoLocation());
    

    This is the jsfiddle if you need to check

    【讨论】:

    • 现在我们正在取得进展!
    • 希望对您有所帮助 :) 如果您需要,请告诉我。
    • Mehdi,我给你赏金。有人向我指出,为我提供地理位置的 HTML 版本也为我提供了 localStorage。
    • @Mehndi:如果用户从浏览器清除位置设置,此 POC 将给出错误条件。在这种情况下,即使清除了位置设置,用户仍然可以从本地存储中获取 true。
    • 该死,那里的赏金不错。感谢这个功能,这正是我所需要的。
    【解决方案2】:

    根据spec,不——navigator.geolocation 上只有三个方法。但是保存到 cookie 或本地存储可能非常合适 - 权限也存储在用户代理中,因此当用户在浏览器之间移动时它应该可以正常工作。

    【讨论】:

    • 但是,developer.mozilla.org/en-US/docs/WebAPI/… 中的“提示权限”部分似乎暗示至少有一个浏览器具有存储权限的机制。
    • 这似乎只适用于 Firefox 插件,不适用于一般网络内容。
    【解决方案3】:

    有关如何使用权限 API 执行此操作,请参阅此答案:Check if Geolocation was allowed and get Lat Lon

    如果之前已授予权限,则无需提示用户即可工作。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 2011-01-30
    相关资源
    最近更新 更多