navigator.geolocation.getCurrentPosition이 때때로 작동하지 않는 경우가 있습니다


220

그래서 navigator.geolocation.getCurrentPosition jammy를 사용하는 아주 간단한 JS가 있습니다.

$(document).ready(function(){
  $("#business-locate, #people-locate").click(function() {
    navigator.geolocation.getCurrentPosition(foundLocation, noLocation);
  });

  navigator.geolocation.getCurrentPosition(foundLocation, noLocation);

  function foundLocation(position) {
    var lat = position.coords.latitude;
    var lon = position.coords.longitude;
    var userLocation = lat + ', ' + lon;
    $("#business-current-location, #people-current-location").remove();
    $("#Near-Me")
      .watermark("Current Location")
      .after("<input type='hidden' name='business-current-location' id='business-current-location' value='"+userLocation+"' />");
    $("#people-Near-Me")
      .watermark("Current Location")
      .after("<input type='hidden' name='people-current-location' id='people-current-location' value='"+userLocation+"' />");
  }
  function noLocation() {
    $("#Near-Me").watermark("Could not find location");
    $("#people-Near-Me").watermark("Could not find location");
  }
})//end DocReady

기본적으로 여기서 발생하는 것은 현재 위치를 얻는 것입니다. 획득 한 경우 두 개의 "워터 마크"가 "현재 위치"라는 두 필드에 배치되고 두 개의 숨겨진 필드가 위도의 데이터로 값으로 생성됩니다 (제거됨). 처음에는 중복되지 않습니다.) 같은 기능을하는 클릭 기능이있는 두 개의 버튼도 있습니다. 불행히도, 세 번째 정도마다 작동합니다. 여기에 무슨 문제가 있습니까 ???


함수를 사용하기 전에 정의하십시오.
tcooc

4
@digitalFresh, 코드가 실행되기 전에 JS 파서가 그러한 선언을 찾기 때문에 중요하지 않습니다
antimatter15

jQuery를 사용하는 데 문제가있을 수 있습니까?

1
때로는 작동하지 않는다고 말할 때 정확히 무엇을 의미합니까? 는 IS noLocation함수가 호출되고? 그렇다면, 당신은 추가 할 수 있습니다 error에 매개 변수를 noLocation()다음 error.codeerror.message당신은 디버깅에 도움이 될 수 있습니다. 또한 어떤 브라우저를 사용하고 있는지, 다른 브라우저에서 동일한 문제가 발생하는지 확인하는 데 도움이 될 수 있습니다.
npdoty

나는 때때로 그것이 나에게 위도를 제공한다는 것을 의미하고 때로는 그렇지 않습니다. 작동하지 않으면 "위치를 찾을 수 없습니다"라는 메시지가 표시되지 않으므로 noLocation 비트도 실행되지 않습니다.

답변:


342

나는 가지고있다 정확히 같은 문제를, 그리고 그것에 대해 온라인으로 거의 정보를 찾을 수 없습니다. 이 책에는 아무것도 없습니다. 마지막으로 stackoverflow 에서이 냉정한 쿼리를 발견했으며 여기에서 계정을 설정하는 데 필요한 마지막 자극이었습니다.

그리고 나는 부분적인 대답을 가지고 있지만, 완전히 완전한 것은 아닙니다.

우선, getCurrentPosition 의 기본 시간 제한무한대 (!)입니다. 즉 , getCurrentPosition이 백엔드 어딘가에 중단되면 오류 처리기가 호출되지 않습니다 .

시간 초과가 발생하지 않도록하려면 getCurrentPosition 호출에 선택적 세 번째 매개 변수를 추가하십시오. 예를 들어, 사용자가 10 초 이상 기다리지 않고 발생하는 상황을 파악하려면 다음을 사용하십시오.

navigator.geolocation.getCurrentPosition(successCallback,errorCallback,{timeout:10000});

둘째, 상황에 따라 상당히 다른 신뢰성을 경험했습니다. 여기서는 정확도가 좋지 않지만 1 ~ 2 초 내에 콜백을받습니다.

그러나 직장에서 나는 행동에있어 매우 기이 한 변화를 경험합니다 : 지리적 위치는 일부 컴퓨터에서는 항상 작동하지만 (IE는 물론 예외), 다른 컴퓨터는 크롬과 사파리에서만 작동하지만 파이어 폭스 (gecko 문제)에서는 작동하지 않습니다. 실패-패턴이 시간마다 시간마다 바뀝니다. 때로는 '운이 좋은'컴퓨터가 있고 때로는 그렇지 않습니다. 아마도 보름달에 염소를 도살하는 것이 도움이 될 것입니까?

나는 이것을 추측 할 수 없었지만, 백엔드 인프라 가이 기능을 추진하는 다양한 궁호 서적과 웹 사이트에 광고것보다 더 고르지 않다고 생각 합니다. 오류 처리기가 제대로 작동하려면 이 기능의 결함과 시간 초과 설정의 중요성 에 대해 조금 더 직설적이기를 바랍니다 .

나는 오늘날 학생들 에게이 물건을 가르치려고 노력했으며 내 컴퓨터 (프로젝터 및 여러 개의 대형 화면)가 조용히 실패한 당황스러운 상황을 보였지만 약 80 %의 학생들이 거의 즉시 결과를 얻었습니다 ( 정확히 동일한 무선 네트워크). 학생들이 오타 및 기타 기포를 만들거나 내 PC가 고장 일 때 이러한 문제를 해결하는 것은 매우 어렵습니다.

어쨌든, 이것이 여러분 중 일부를 돕기를 바랍니다. 위생 검사 감사합니다!


5
좋은 자세한 정보, 감사합니다! 동일한 문제가 있지만 Firefox 3.6.13에서만 발생합니다. Chrome은 매우 안정적인 것으로 보입니다.
Felipe Lima

여기에서도 마찬가지이며 maximumAge 매개 변수도 신뢰할 수없는 것 같습니다. 게시물 주셔서 감사합니다.
Richard

1
좋은 점은 위의 시간 초과 매개 변수를 사용 하면 동일한 문제가 발생했습니다 ( Samsung Galaxy Tab, 10.1, Android 4.0.3 실행 ). 위의 시간 초과 매개 변수를 사용하면 문제를 처리 할 수있었습니다.
mlo55

9
timeout옵션의 getCurrentPosition()타이밍이 무엇인지 이해하는 것이 중요합니다 . 사용자가 지리적 위치 요청을 허용하거나 거부 할 시간은 아니지만 권한이 부여되면 네트워크가 위치를 반환하는 데 걸리는 시간입니다. 사용자가 지리적 위치 요청에 응답하지 않으면 오류 핸들러가 호출되지 않습니다. 따라서 @ xiaohouzi79 답변과 같은 두 번째 시간 초과가 필요합니다.
François

2
보름달에 도살 염소가 도움이 될까요? LOL
Asim KT

66

이것은 내가이 문제를 해결하는 해키 방법입니다. 적어도 현재 모든 브라우저에서 작동합니다 (Windows에서는 Mac이 없습니다).

if (navigator.geolocation) {
    var location_timeout = setTimeout("geolocFail()", 10000);

    navigator.geolocation.getCurrentPosition(function(position) {
        clearTimeout(location_timeout);

        var lat = position.coords.latitude;
        var lng = position.coords.longitude;

        geocodeLatLng(lat, lng);
    }, function(error) {
        clearTimeout(location_timeout);
        geolocFail();
    });
} else {
    // Fallback for no geolocation
    geolocFail();
}

Firefox에서 닫기를 클릭하거나 아니오를 선택하거나 공유 안함 옵션을 선택한 경우에도 작동합니다.

어색하지만 작동합니다.


1
+1 그러나 geolocFail();오류 처리기와 getcodeLatLng();지오 코더 가 없습니다 .
카이저

Sweet-누군가가 위치를 공유하지 않기로 선택하면 타이머가 아름답게 작동합니다. 사용자가 이렇게하면 일부 브라우저가 제대로 재생되지 않습니다. 이 타이머 해결 방법은 내 Store Locator Plus WP 플러그인에서 훌륭하게 작동했습니다!
랜스 클리블랜드

2
@sajith-이 솔루션이 최신 FF 브라우저에서 최신 버전인지 확실하지 않습니다. 작업중 인 사이트에 솔루션이 필요했기 때문에 솔루션을 제공 할 때 작동했습니다. 테스트 했습니까?
가는

죄송합니다, 그것은 .... 내가 폐쇄 work.After를 만드는 것을 발견하고 해결 방안 FF에게 그 작업 ........ 고맙습니다 다시 기운 worked.But
sajith

1
문자열 안에 함수를 사용해서는 안됩니다. 사악한 평가는 거기서 불필요하게 작동합니다. setTimeout ( "geolocFail ()", 10000);
atilkan

42

이것은 매번 나를 위해 작동합니다.

navigator.geolocation.getCurrentPosition(getCoor, errorCoor, {maximumAge:60000, timeout:5000, enableHighAccuracy:true});

매우 정확하지는 않지만. 재미있는 것은 동일한 장치에서이를 실행하면 약 100 미터 (매번) 떨어져 나옵니다. 그러나 Google지도로 가면 내 위치를 정확하게 찾습니다. 따라서 enableHighAccuracy : true가 일관되게 작동하는 데 도움이되지만 더 정확하게 만드는 것은 아닙니다 ...


이로 인해 firefox는 요청을 거부하고 시간 초과 객체를 다시 보내지 못했습니다.
tony

100 미터 떨어진 곳에 내가 부착 한 셀 타워가 있습니다. 휴대 전화가 아닌 셀 타워의 위치를 ​​반환합니다. 나는에 킥에 GPS 밖에 있다면 더 정확한 될 수 있습니다.
K'shin Gendron

9
maximumAge 파레 미터가 60 초로 설정되어 있기 때문에 몇 미터 떨어져 있습니다. 60 초 전에 당신의 위치를 ​​두었습니다. maximumAge를 10 초 이하로 설정하고 (maximumAge : 10000) 다시 시도하십시오.
Robert Smith

Observable을 반환하는 Angular Resolver 내 에서이 getCurrentPosition을 사용하고있었습니다. 리졸버가 간헐적으로 완료되었습니다. {maximumAge : 60000, timeout : 5000, enableHighAccuracy : true} 옵션을 추가하면 매번 작동합니다 !!!
Moutono

17

이것은 이미 오래된 질문이지만 모든 답변으로 문제가 해결되지 않았으므로 마지막으로 찾은 질문을 추가하십시오. 그것은 해킹 냄새가 나고 (하나입니다) 항상 내 상황에서 작동합니다. 당신의 상황에서도 희망하십시오.

//Dummy one, which will result in a working next statement.
navigator.geolocation.getCurrentPosition(function () {}, function () {}, {});
//The working next statement.
navigator.geolocation.getCurrentPosition(function (position) {
    //Your code here
}, function (e) {
    //Your error handling here
}, {
    enableHighAccuracy: true
});

3
그것은 해킹의 가장 해킹이며, 당신이 어떻게 그것을 시도했다고 생각하는지 모르지만 내 문제를 해결합니다. 감사합니다!
Brett Gregson

어떤 경우에는 이것을 직접 사용했습니다. 두 번째 시도는 항상 내 경험에서 더 잘 작동합니다.
Nico Westerdale

13

여기 사람들과 마찬가지로, 이것은 FF와 Safari가 아닌 Chrome (안정적, 개발 및 카나리아)에서 완벽하게 작동합니다. 내 iPhone 및 iPad에서도 완벽하게 작동합니다 (Safari!). 이것은이 기능의 새로운 기능 때문일 수 있습니다 (즉, 버그). 나는 지금 이것에 거의 일주일을 보내고 그 브라우저에서 작동하도록 할 수 없습니다.

내가 찾은 것은 다음과 같습니다.

getCurrentPosition을 처음 호출하면 완벽하게 작동합니다. 후속 호출은 절대 반환되지 않습니다. 즉, successCallback 또는 errorCallback 함수를 실행하지 않습니다. 내 요점을 증명하기 위해 전화에 몇 가지 직위 옵션을 추가했습니다.

 navigator.geolocation.getCurrentPosition(successCallback, errorCallback,  {timeout: 10000});

그리고 매번 (첫 번째 성공적인 호출 후) 시간 초과됩니다. 나는 maximumAge로 그것을 고칠 수 있다고 생각했지만 그것이 작동한다고 가정하기 때문에 작동하지 않는 것 같습니다.

navigator.geolocation.getCurrentPosition(successCallback, errorCallback,  {maximumAge:60000, timeout: 2000});

이렇게하면 60 초 이내에 getCurrentPosition 함수를 호출하면 실제로 호출 할 수 없지만이를 무시합니다 (그러나 실제로는 페이지를 새로 고침하여 두 번째 호출을 트리거하기 때문에 발생할 수 있습니다. 이는 지속적인 총 호출인지 확실하지 않습니다)

btw, 구글의 예제 조차도이 브라우저에서 실패하여 이것이 실제로 브라우저 버그라고 생각하고, 시도하고, Safari에서 두 번로드하면 두 번째로 작동하지 않습니다.

아무도 이것에 대한 해결책을 찾으면 알려주십시오 :-)

건배.


나는 당신과 같은 정확한 문제가 있습니다. 첫 번째 전화에서는 작동하지만 아무도 다음 해결책을 찾지 못하면 누군가가 매우 혼란 스럽습니다 ... @ xiaohouzi79 geolocFail ( )
Adriano Rizzo

8

기본적으로 시간 초과가 없기 때문에 오류 메시지가 표시되지 않습니다 (적어도 생각합니다). 나에게만 firefox와 같은 문제가 있었지만 firefox는 항상 시간 초과를 제공합니다. 이와 같이 시간 초과를 직접 설정할 수 있습니다.

내 기능은 크롬에서 훌륭하게 작동하지만 파이어 폭스에서 매번 시간 초과가 발생합니다.

    navigator.geolocation.getCurrentPosition(
        function(position) {
            //do succes handling
        },
        function errorCallback(error) {
            //do error handling
        },
        {
            timeout:5000
        }
    );

오류를주의 깊게 관찰하는 것이 좋습니다. 모든 것을 기대하십시오. 모든 것을위한 백업 계획을 세우십시오. Google 지리적 위치와 네비게이터 위치 정보가 모두 실패하는 경우 데이터베이스의 일부 기본값 또는 값을 직접 사용합니다.


7
참고로, maximumAge는 캐시에있는 위치 데이터의 수명을 나타내며이를 무한대로 설정하면 캐시 된 버전을 얻을 수 있습니다. 0으로 설정하면 장치가 위치를 강제로 검색합니다.
Porco

maximumAge로 인해 다운 보트 : 무한대는 위에서 지적한대로 강제로 캐시 값을 사용함을 의미합니다.
n13

7

2017 년에도 여전히 주목할만한 결과가 나오고 있으며 이론에 따르면 API 설명서에 따르면 "보안 컨텍스트에서"즉, HTTPS를 통해서만 호출을 사용할 수 있다고합니다. 개발 환경 (localhost http)에서 결과를 얻는 데 문제가 있으며 이것이 바로 그 이유라고 생각합니다.


흠. 2020 년에도 여전히 로컬 호스트에서 HTTPS를 사용할 수 있습니다!
NitroStoutPlz

6

누군가에게 유용 할 수 있도록 여기에 게시하겠습니다…

iOS Safari에서 navigator.geolocation.getCurrentPosition활성 navigator.geolocation.watchPosition기능이 실행 중이 면 호출 시간이 초과됩니다 .

여기에 설명 된대로 watchPosition올바르게 사용하여 시작하고 중지 clearWatch()했습니다 : https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/watchPosition


1
정말 고맙습니다. 이것이 나를위한 해결책이었습니다.
친 정콴

5

폐쇄 덕분에 내 솔루션은 다음과 같습니다.

  function geoloc(success, fail){
    var is_echo = false;
    if(navigator && navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(
        function(pos) {
          if (is_echo){ return; }
          is_echo = true;
          success(pos.coords.latitude,pos.coords.longitude);
        }, 
        function() {
          if (is_echo){ return; }
          is_echo = true;
          fail();
        }
      );
    } else {
      fail();
    }
  }

  function success(lat, lng){
    alert(lat + " , " + lng);
  }
  function fail(){
    alert("failed");
  }

  geoloc(success, fail);

이것은 반응 네이티브에서 나를 위해 일했다 navigator && navigator.geolocation
Ashish Singh Rawat

5

그래서 나는 같은 일을 겪고있었습니다. 작동했지만 안정적이지 않은 시간 초과 솔루션을 시도했습니다. 두 번만 호출하면 위치가 올바르게 새로 고쳐집니다.

function getLocation(callback)
{   
    if(navigator.geolocation)
    {
        navigator.geolocation.getCurrentPosition(function(position)
        {
            navigator.geolocation.getCurrentPosition(callback, function(){},{maximumAge:0, timeout:10000});
        },function(){}, {maximumAge:0, timeout:10000});
    }
    return true;
}

물론 이것은 조금 느리지 만 한 번 잘못된 위치를 얻지 못했습니다. 나는 그것이 타임 아웃에 몇 번 맞았고 아무것도 반환하지 않고 다른 것을 반환했습니다. 나는 이것이 여전히 약간 해 키라는 것을 알고 있으며 실제 해결책을 찾는 누군가를 고대하고 있습니다.

또는 포기하고 싶을 때까지 계속 노력하고 있는지 확인하려면 다음과 같이 해보십시오.

//example
$(document).ready(function(){
    getLocation(function(position){
        //do something cool with position
        console.log(position);
    });
});


var GPSTimeout = 10; //init global var NOTE: I noticed that 10 gives me the quickest result but play around with this number to your own liking


//function to be called where you want the location with the callback(position)
function getLocation(callback)
{   
    if(navigator.geolocation)
    {
        var clickedTime = (new Date()).getTime(); //get the current time
        GPSTimeout = 10; //reset the timeout just in case you call it more then once
        ensurePosition(callback, clickedTime); //call recursive function to get position
    }
    return true;
}

//recursive position function
function ensurePosition(callback, timestamp)
{
    if(GPSTimeout < 6000)//set at what point you want to just give up
    {
        //call the geolocation function
        navigator.geolocation.getCurrentPosition(
            function(position) //on success
        {
                //if the timestamp that is returned minus the time that was set when called is greater then 0 the position is up to date
            if(position.timestamp - timestamp >= 0)
                {
                    GPSTimeout = 10; //reset timeout just in case
                    callback(position); //call the callback function you created
                }
                else //the gps that was returned is not current and needs to be refreshed
                {
                    GPSTimeout += GPSTimeout; //increase the timeout by itself n*2
                    ensurePosition(callback, timestamp); //call itself to refresh
                }
            },
            function() //error: gps failed so we will try again
            {
                GPSTimeout += GPSTimeout; //increase the timeout by itself n*2
                ensurePosition(callback, timestamp);//call itself to try again
            },
            {maximumAge:0, timeout:GPSTimeout}
        )
    }       
}

아마 여기에 약간의 타이 포스와 철자 오류가 있지만 아이디어를 얻길 바랍니다. 누군가 궁금한 점이 있거나 더 좋은 점이 있으면 알려주세요.


4

iPhone 앱을 사용하는 사람이라면 ...

코드가 iOS 9+의 UIWebView에서 실행중인 경우 설정해야합니다 NSLocationWhenInUseUsageDescription 앱의 plist 내에서 .

설정하지 않으면 getCurrentPosition다시 전화를 걸지 않으며 사용자에게 메시지가 표시되지 않습니다.


3

나는이 방법으로 작동하지 않는 것을 발견

navigator.geolocation.getCurrentPosition(function() {...}, function(err) {...}, {});

그러나

이 방법은 완벽하게 작동합니다

function storeCoordinates(position) {
    console.log(position.coords.latitude, position.coords.longitude);
}    

function errorHandler() {...}

navigator.geolocation.getCurrentPosition(storeCoordinates, errorHandler, { enableHighAccuracy: true, timeout: 20000, maximumAge: 0 });

4
둘의 차이점은 무엇입니까?
Pardeep Jain

익명 함수 대 이름이 1
1nstinct

정말 큰 차이. 이 역시 작동하지 않는, 감사합니다
withoutOne

3

@ brennanyoung의 대답은 훌륭하지만 실패 한 경우 어떻게 해야할지 궁금하다면 https://ipinfo.io (내 서비스) 와 같은 IP 지리적 위치 API를 사용할 수 있습니다 . 예를 들면 다음과 같습니다.

function do_something(coords) {
    // Do something with the coords here
    // eg. show the user on a map, or customize
    // the site contents somehow
}

navigator.geolocation.getCurrentPosition(function(position) { 
    do_something(position.coords);
    },
    function(failure) {
        $.getJSON('https://ipinfo.io/geo', function(response) { 
        var loc = response.loc.split(',');
        var coords = {
            latitude: loc[0],
            longitude: loc[1]
        };
        do_something(coords);
        });  
    };
});

자세한 내용은 https://ipinfo.io/developers/replacing-getcurrentposition 을 참조하십시오.


다음은 이에 대한 수정 된 링크입니다 ipinfo.io/developers/replacing-getcurrentposition
peater

5
무서운. 정확도는 미국과 캐나다의 경우 실제 위치에서 5 ~ 7 마일, 러시아 어딘가의 경우 100 마일 정도입니다.
ekashking

1
위치가 무엇인지 전혀 모르는 것보다 훨씬 많은 응용 프로그램에 적합합니다.
벤 Dowling

이것은 어디서나 작동하지 않습니다. 잘못된으로 경도와 위도지고 모든 요청
withoutOne

무슨 뜻인가요? 몇 가지 예가 있습니까?
벤 다울 링

2

비슷한 문제가 발생하여 브라우저에 getCurrentPosition 호출 빈도에 제한이있을 가능성을 조사했습니다. 종종 위치를 얻을 수있는 것 같지만 페이지를 즉시 새로 고치면 시간이 초과됩니다. 조금만 기다리면 일반적으로 위치를 다시 얻을 수 있습니다. 이것은 보통 FF에서 발생합니다. Chrome과 Safari에서 getCurrentPosition 시간이 초과되는 것을 아직 알지 못했습니다. 그냥 생각 ...

이것을 뒷받침하는 문서를 찾을 수는 없지만 많은 테스트를 거친 후에 결론을 얻었습니다. 아마도 다른 누군가가 그것에 대한 정보를 가지고 있습니까?


그건 좋은 지적이야. 시간 초과 / 실패는 주로 테스트 중이며 위치 정보 데이터를 반복적으로 쿼리 할 때 발생하는 것으로 보입니다. 이것이 버그의 결과인지 또는 제안한대로 의도적으로 설계된 것인지 알고 싶습니다.
Jamie

브라우저가 위치 서비스에 대한 통화량을 제한하는 경우는 보지 못했습니다. 얼마나 자주 쿼리하고 있습니까?
Nico Westerdale

2

마침내 안드로이드에서 파이어 폭스, 크롬 및 기본 네비게이터의 작동 버전을 찾았습니다 (4.2 테스트 만 해당).

function getGeoLocation() {
        var options = null;
        if (navigator.geolocation) {
            if (browserChrome) //set this var looking for Chrome un user-agent header
                options={enableHighAccuracy: false, maximumAge: 15000, timeout: 30000};
            else
                options={maximumAge:Infinity, timeout:0};
            navigator.geolocation.getCurrentPosition(getGeoLocationCallback,
                    getGeoLocationErrorCallback,
                   options);
        }
    }

2

전달 된 두 번째 매개 변수는 Geolocation.getCurrentPosition()지리적 위치 오류를 처리하려는 함수입니다. 오류 처리기 함수 자체는 PositionError지리적 위치 시도가 실패한 이유에 대한 세부 정보가 포함 된 개체를 받습니다 . 문제가 있으면 콘솔에 오류를 출력하는 것이 좋습니다.

var positionOptions = { timeout: 10000 };
navigator.geolocation.getCurrentPosition(updateLocation, errorHandler, positionOptions);
function updateLocation(position) {
  // The geolocation succeeded, and the position is available
}
function errorHandler(positionError) {
  if (window.console) {
    console.log(positionError);
  }
}

내 코드 에서이 작업을 수행하면 " ' https://www.googleapis.com/ '의 네트워크 위치 공급자 : 오류 코드 400을 반환 했습니다."라는 메시지가 나타납니다 . Chrome은 Google API를 사용하여 GPS가 내장되지 않은 기기 (예 : 대부분의 데스크톱 컴퓨터)에서 위치를 가져옵니다. Google은 사용자의 IP 주소를 기준으로 대략적인 위도 / 경도를 반환합니다. 그러나 Chrome의 개발자 빌드 (예 : Ubuntu의 Chromium)에는 브라우저 빌드에 API 액세스 키가 포함되어 있지 않습니다. 이로 인해 API 요청이 자동으로 실패합니다. 자세한 내용은 Chromium 문제 179686 : 위치 정보 제공 403 오류 를 참조하십시오.


1

Mozilla에서이 문제가 있습니다. 항상 : 오류 : 위치를 알 수없는 오류가 발생했습니다 .

이제 47 Mozilla를 사용하고 있습니다. 나는 모든 것을 시도했지만 항상이 문제를 해결했습니다. 하지만 그때 나는 열 설정 :에 대해 , 내 addsress 표시 줄에 이동 geo.wifi.ui을 하고 "가치 변화 https://location.services.mozilla.com/v1/geolocate?key=test ". 공장!

u는 경우 위치 포착 시간이 초과 오류, 시간 제한 값을 증가하려고 :

var options = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0       
};
navigator.geolocation.getCurrentPosition(success, error, options);

1

getCurrentPosition실패 시 IP 주소 지리적 위치 서비스를 대체 방법으로 사용하는 것이 좋습니다 . 예를 들어 api https://ip-api.io

$.getJSON("http://ip-api.io/json/",
    function(result) {
        console.log(result);
    });

1

우리의 경우 항상 처음에는 작동하지만 3-4 회 이상 기능을 다시 실행하면 실패합니다.

간단한 해결 방법 : 값을 LocalStorage에 저장하십시오.

전에:

navigator.geolocation.getCurrentPosition((position) => {
  let val = results[0].address_components[2].long_name;
  doSthWithVal(val);      
}, (error) => { });

후:

if(localStorage.getItem('getCurrentPosition') !== null) {
  doSthWithVal(localStorage.getItem('getCurrentPosition'));
}
else {
  navigator.geolocation.getCurrentPosition((position) => {
      let val = results[0].address_components[2].long_name;
      localStorage.setItem('getCurrentPosition',val);
      doSthWithVal(val);      
  }, (error) => { });
}

0

나는 최근 에이 문제를 스스로 발견했으며 어떻게 발생했는지 잘 모르겠지만 때로는 파이어 폭스가 캐시에로드 된 무언가에 붙어있는 것처럼 보일 것입니다. 캐시를 지우고 파이어 폭스를 다시 시작하면 다시 작동하는 것처럼 보입니다.


0

이 라이브러리 는 원하는 위치 정확도 및 maxWait 옵션을 지리적 위치 호출에 추가합니다. 즉, 정확도가 지정된 범위 내에있을 때까지 위치를 계속 확보하려고합니다.


0

의견을 주신 모든 분들께 감사드립니다.

getCurrentPosition () 대신 watchPosition ()을 사용해야하는 것 외에도 document.ready () 내에서 헤드로 호출을 이동해야한다는 것도 알게되었습니다.


0

Firefox의 반응 형 디자인 모드를 사용할 때 이런 일이 발생했습니다. 가 발생했습니다 버그 리포트 제출했다. 현재는 Geolocation API를 사용하는 동안 반응 형 디자인 모드를 사용하지 마십시오.


0

그것은 하나를 도울 수 있습니다 .Android에서 동일한 문제가 있었지만 setTimeout 내부 를 사용하여 알아 냈습니다 document.ready . 두 번째로 효과가있었습니다. 사용자가 몇 초 후에 자신의 위치를 ​​허용하는 경우를 대비하여 시간 초과를 늘려야하므로 60000으로 유지했습니다. 사용자가 1 분 이내에 허용 버튼을 클릭하면 성공 함수가 호출되도록 밀리 초 (1 분).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.