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
}
}
추신 : 위의 답변에 대해 충분한 평판을 얻지 못해서 새로운 답변을 만들어야했습니다. 미안합니다.
'IT story' 카테고리의 다른 글
Bash에서 여러 줄 출력을 배열로 캡처 (0) | 2021.01.06 |
---|---|
조각과 활동 간의 통신-모범 사례 (0) | 2021.01.06 |
Android SearchView에서 키보드를 닫는 방법은 무엇입니까? (0) | 2021.01.05 |
배열을 다시 색인화하는 방법은 무엇입니까? (0) | 2021.01.05 |
build.xml : 479로 Android 빌드 실패 : SDK에 빌드 도구가 설치되어 있지 않습니다. (0) | 2021.01.05 |