IT story

Javascript로 지리적 위치가 거부되었는지 확인하는 방법이 있습니까?

hot-time 2021. 1. 5. 19:18
반응형

Javascript로 지리적 위치가 거부되었는지 확인하는 방법이 있습니까?


지리적 위치가 거부 된 경우 수동 입력을 표시하려면 JavaScript가 필요합니다.

내가 시도한 것 :

Modernizr.geolocation
navigator.geolocation

사용자가 이전에 위치 정보에 대한 액세스를 거부했는지 여부도 설명하지 않습니다.


watchPosition그리고 getCurrentPosition모두 오류가있을 때 호출되는 두 번째 콜백을 받아들입니다. 오류 콜백은 오류 객체에 대한 인수를 제공합니다. 거부 된 권한의 error.code경우 error.PERMISSION_DENIED(숫자 값 1)이됩니다.

자세한 내용은 https://developer.mozilla.org/en/Using_geolocation에서 확인하세요.

예:

navigator.geolocation.watchPosition(function(position) {
    console.log("i'm tracking you!");
  },
  function(error) {
    if (error.code == error.PERMISSION_DENIED)
      console.log("you denied me :-(");
  });

편집 : @Ian Devlin이 지적했듯이 Firefox (이 게시물 당시 4.0.1) 가이 동작을 지원하지 않는 것 같습니다. Chrome 및 아마도 Safari 등에서 예상대로 작동합니다 .


새로운 권한 API를 사용하면 다음과 같이 사용할 수 있습니다.

navigator.permissions.query({ name: 'geolocation' })
.then(console.log)

(Blink 및 Firefox에서만 작동)

http://caniuse.com/#feat=permissions-api


W3C 지리적 위치 사양 에 따라 getCurrentPosition호출은 성공에 대한 콜백과 실패에 대한 콜백을 반환 할 수 있습니다. 그러나 발생한 오류에 대해 실패 콜백이 호출되며 다음 중 하나입니다. (0) unknown; (1) 허가 거부 됨; (2) 위치를 사용할 수 없습니다. 또는 (3) 시간 초과. [ 출처 : Mozilla ]

귀하의 경우 사용자가 명시 적으로 액세스를 거부 한 경우 특정 작업을 수행하고 싶습니다. 다음 error.code과 같이 실패 콜백에서 값을 확인할 수 있습니다 .

navigator.geolocation.getCurrentPosition(successCallback,
    errorCallback,
    {
        maximumAge: Infinity,
        timeout:0
    }
);

function errorCallback(error) {
    if (error.code == error.PERMISSION_DENIED) {
        // pop up dialog asking for location
    }
}

Firefox 문제를 해결하는 것은 정말 쉽습니다. 제 경우에는 geolocation이라는 Javascript의 전역 변수에 geolocation을 저장합니다. 이 변수를 사용하기 전에 정의되어 있지 않은지 확인하기 만하면 IP에서 지리적 위치를 가져옵니다.

내 웹 사이트에서는 처음 위치를 얻는 데 아무런 문제가 없지만 너무 빠르기 때문에 처음에는 위치 정보를 얻을 시간이없는 짧은 예를 보았습니다.

어쨌든 이것은 단지 예일 뿐이며 각 경우에 적용해야합니다.

var geolocation = {};
getLocation();

$(document).ready(function(){
    printLocation(); // First time, hasn't time to get the location
});

function printLocation(){
    if(typeof geolocation.lat === "undefined" || typeof geolocation.long === "undefined"){
        console.log("We cannot get the geolocation (too fast? user/browser blocked it?)");
        // Get location by IP or simply do nothing
    }
    else{
        console.log("LATITUDE => "+geolocation.lat);
        console.log("LONGITUDE => "+geolocation.long);
    }
}

function getLocation() {
    // If the user allow us to get the location from the browser
    if(window.location.protocol == "https:" && navigator.geolocation)
        navigator.geolocation.getCurrentPosition(function(position){
            geolocation["lat"] = position.coords.latitude;
            geolocation["long"] = position.coords.longitude;
            printLocation(); // Second time, will be return the location correctly
        });
    else{
        // We cannot access to the geolocation
    }
}

추신 : 위의 답변에 대해 충분한 평판을 얻지 못해서 새로운 답변을 만들어야했습니다. 미안합니다.

참조 URL : https://stackoverflow.com/questions/6092400/is-there-a-way-to-check-if-geolocation-has-been-declined-with-javascript

반응형