navigator.geolocation.getCurrentPosition bazen çalışıyor bazen çalışmıyor


220

Navigator.geolocation.getCurrentPosition jammy kullanarak JS oldukça basit bir bit var.

$(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

Temelde burada olan şu anki pozisyonu alıyoruz, eğer elde edilirse, "Mevcut Pozisyon" diyen iki alana iki "filigran" yerleştirilir ve en son verilerle değer olarak iki gizli alan oluşturulur (kaldırılırlar başlangıçta her seferinde çoğaltılmazlar). Aynı şeyi yapan, kendilerine bağlı bir tıklama işlevine sahip iki düğme de vardır. Ne yazık ki, her üç seferde bir işe yarıyor. Burada sorun ne ???


Belki işlevleri kullanmadan önce tanımlayın.
tcooc

4
@digitalFresh, JS ayrıştırıcı kod yürütülmeye başlamadan önce bu bildirimleri aradığı için önemli değil
antimatter15

Orada jQuery kullanımı sorunlara neden olabilir mi?
theassociatedweb

1
Bazen işe yaramadığını söylediğinde tam olarak ne demek istiyorsun? Is noLocationişlev çağrılan? Eğer öyleyse, bir ekleyebilir errorparametreyi noLocation()ve sonra error.codeve error.messagesen ayıklama yardımcı olabilir. Ayrıca hangi tarayıcıyı kullandığınızı ve aynı sorunu farklı tarayıcılarda görüp görmediğinizi bilmemize yardımcı olabilir.
npdoty

Demek istediğim bazen bana lat-lon veriyor, bazen de vermiyor. işe yaramazsa, "konum bulunamadı" iletisini bile atmaz, böylece noLocation biti de tetiklenmez.
theassociatedweb

Yanıtlar:


342

Ben ettirmektedirler tam olarak aynı sorun ve bu konuda çevrimiçi neredeyse hiç bilgi bulma. Kitaplarda hiçbir şey yok. Sonunda stackoverflow bu ayık sorgu bulundu ve (ha!) Burada bir hesap oluşturmak için gereken son itici güç oldu.

Ve kısmi bir cevabım var, ama ne yazık ki tam bir cevap değil.

Her şeyden önce, getCurrentPosition için varsayılan zaman aşımının sonsuz olduğunu fark edin (!) . Bu, getCurrentPosition arka uçta bir yerde asılı kalırsa hata işleyicinizin asla çağrılmayacağı anlamına gelir .

Zaman aşımı aldığınızdan emin olmak için, isteğe bağlı üçüncü parametreyi getCurrentPosition çağrınıza ekleyin; örneğin, kullanıcının neler olup bittiğine dair bir ipucu vermeden önce en fazla 10 saniye beklemesini istiyorsanız, şunu kullanın:

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

İkincisi, farklı bağlamlarda oldukça farklı bir güvenilirlik yaşadım. Burada, doğruluk zayıf olmasına rağmen, bir veya iki saniye içinde bir geri arama alıyorum.

Ancak iş yerinde, davranışta oldukça tuhaf varyasyonlar yaşıyorum: Coğrafi konum her zaman bazı bilgisayarlarda çalışır (IE hariç, elbette), diğerleri sadece krom ve safari'de çalışır, ancak firefox (gecko sorunu?) başarısız - ve desen günden güne değişir. Bazen 'şanslı' bir bilgisayarınız olur, bazen olmaz. Belki de dolunayda keçi kesmek yardımcı olabilir mi?

Bunu kavrayamadım, ancak arka uç altyapının, bu özelliği iten çeşitli gung-ho kitaplarında ve web sitelerinde tanıtılandan daha düzensiz olduğundan şüpheleniyorum . Hata işleyicinizin düzgün çalışmasını istiyorsanız, bu özelliğin ne kadar kesintili olduğu ve zaman aşımı ayarının ne kadar önemli olduğu konusunda biraz daha düz olmasını diliyorum. .

Bu şeyleri bugün öğrencilere öğretmeye çalışıyorum ve kendi bilgisayarımın (projektörde ve birkaç büyük ekranda) sessizce başarısız olduğu utanç verici durumdayken, öğrencilerin yaklaşık% 80'i neredeyse anında sonuç alıyordu ( aynı kablosuz ağ). Öğrencilerim de yazım hataları ve diğer gaflar yaparken ve kendi bilgisayarım da başarısız olduğunda bu sorunları çözmek çok zor.

Neyse, umarım bu bazılarınıza yardımcı olur. Sağlık kontrolü için teşekkürler!


5
İyi detaylı bilgi, teşekkürler! Aynı sorunları görüyorum, ancak yalnızca Firefox 3.6.13'te. Chrome oldukça güvenilir görünüyor.
Felipe Lima

Burada da aynı, maximumAge parametresi de güvenilir görünmüyor. Gönderi için teşekkürler.
Richard

1
Güzel olan, aynı sorunu yaşadım ( Samsung Galaxy Tab, 10.1, Android 4.0.3 çalıştıran ), yukarıdaki zaman aşımı parametresini kullandığımda, sorunu halledebildim.
mlo55

9
İçindeki timeoutseçeneğin getCurrentPosition()gerçekten zamanlama olduğunu anlamak önemlidir . Kullanıcının coğrafi konum belirleme isteğine izin verme veya reddetme zamanı değil, izin verildiğinde ağın bir yeri geri döndürmesi için ne kadar süre beklendiği. Kullanıcı coğrafi konum isteğini yanıtlamazsa, hata işleyici hiçbir zaman çağrılmaz. Böylece, @ xiaohouzi79 yanıtı gibi ikinci bir zaman aşımı gerekir.
François

2
dolunayda keçi kesmek yardımcı olur mu? LOL
Asim KT

66

Bu, etrafta dolaştığım hacky yolu, en azından mevcut tüm tarayıcılarda çalışır (Windows'ta, Mac'im yok):

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();
}

Bu, birisi kapanışı tıklar veya hayır'ı seçerse veya Firefox'ta Asla Paylaşma seçeneğini seçerse de çalışır.

Clunky, ama işe yarıyor.


1
+1 Ancak geolocFail();hata işleyiciyi ve getcodeLatLng();coğrafi kodlayıcıyı kaçırıyorsunuz .
kaiser

Sweet - birisi konum paylaşmamayı seçerse zamanlayıcı güzel çalışır. Kullanıcılar bunu yaptığında bazı tarayıcılar iyi oynatılmaz. Bu zamanlayıcı çözümü Mağaza Bulucu Plus WP Eklentimde harika çalıştı!
Lance Cleveland

2
@sajith - Bu çözümün artık yeni FF tarayıcılarıyla eski olup olmadığından emin değilim. Çözümü sağladığım zaman işe yaradı çünkü üzerinde çalıştığım bir siteye ihtiyacım vardı. Test yaptın mı?
gidiyor

Üzgünüm, işe yaradı.Ama ne işe yaradığını bulamıyorum.FF'yi kapattıktan ve yeniden açtıktan sonra ........ Çözümünüz için
teşekkürler

1
Dize içinde işlev kullanmamalısınız. Kötü eval orada bir arada çalışır. setTimeout ("geolocFail ()", 10000);
atilkan

42

Bu benim için her zaman işe yarar:

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

Çok doğru olmasa da. Komik olan şey, eğer bunu çalıştırırsam aynı cihazda beni yaklaşık 100 metre (her seferinde) çıkarır, ancak google'ın haritalarına gidersem konumumu tam olarak bulur. EnableHighAccuracy: true'nun tutarlı bir şekilde çalışmasına yardımcı olduğunu düşünmeme rağmen, artık daha doğru görünmüyor ...


Bu, firefox'un isteği reddetmesini ve zaman aşımı nesnesini geri göndermesini durdurdu.
tony

100 metre ileride bağlı olduğum baz istasyonu. Yani baz istasyonu kulesini döndürüyor, telefonumu değil. Eğer
gps'nin içeri girmesi

9
60 metreye ayarlanmış maksimumAge paremeter'e sahip olduğunuz için sizi birkaç metre erteliyor. Yani 60 saniye önce bulunduğunuz yeri koyuyor. MaximumAge değerini 10 saniye veya daha azına ayarlayın (maximumAge: 10000) ve tekrar deneyin.
Robert Smith

Bu getCurrentPosition bir Gözlemlenebilir döndüren bir Açısal Çözümleyici içinde kullanıyordum. Çözümleyici yalnızca aralıklı olarak tamamlandı. Bu seçenekleri ekleyerek: {maximumAge: 60000, zaman aşımı: 5000, enableHighAccuracy: true} her seferinde çalışmasını sağladı !!!
Moutono

17

Bu zaten eski bir soru, ama tüm cevaplar sorunumu çözmedi, bu yüzden sonunda bulduğum soruyu ekleyelim. Bir kesmek gibi kokuyor (ve bir tane), ama her zaman benim durumumda çalışıyor. Durumunda da umut.

//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
Bu hack'lerin en hacizidir ve bunu nasıl denemeyi düşündüğün hakkında hiçbir fikrim yok, ama sorunumu çözdü. Teşekkür ederim!
Brett Gregson

Bazı durumlarda bunu kendim kullandım. İkinci girişim her zaman tecrübelerimde daha iyi çalışıyor
Nico Westerdale

13

Burada aynı insanlar, bu sadece FF ve Safari'de değil Chrome'da (istikrarlı, dev ve kanarya) mükemmel btw çalışır. Ayrıca iPhone ve iPad (Safari!) Cihazımda mükemmel çalışıyor. Bu, bu özelliğin göreceli yeniliğinden kaynaklanabilir (yani bir hatadır). Şimdi bunun için neredeyse bir hafta geçirdim ve bu tarayıcılarda çalışamıyorum

İşte bulduğum şey:

GetCurrentPosition'ı ilk çağırdığınızda mükemmel çalışır. Sonraki aramalar hiçbir zaman geri dönmez, yani successCallback veya errorCallback işlevlerini tetiklemez. Demek istediğimi kanıtlamak için görüşüme birkaç konum seçeneği ekledim:

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

ve her seferinde zaman aşımına uğrar (ilk başarılı çağrıdan sonra). Ben maximumAge ile düzeltebilir düşündüm, ama ya da çalışmak varsayalım gibi çalışmıyor gibi görünüyor:

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

Bu, 60 saniye içinde çağırırsanız gerçekten getCurrentPosition işlevini çağırmayı engellemelidir, ancak bunu göz ardı eder (bunun nedeni, aramaların kalıcı bir şekilde devam edip etmediğinden emin olmadığım için ikinci sayfamı tetiklemek için sayfamı yenilediğim için olabilir)

btw, hatta google'ın örnekleri bu tarayıcılarda başarısız oluyor, bu da bunun gerçekten tarayıcı hataları olduğuna inanmamı sağlıyor, deneyin, Safari'ye iki kez yükleyin ve ikinci kez çalışmaz.

Herkes bunun için bir çözüm bulursa, LÜTFEN bana bildirin :-)

Şerefe.


Ben seninki gibi kesin bir sorun var, bu ilk çağrı için çalışır ama asla bir sonraki olanlar için, kimse çok intersted olurdu bir çözüm bulursanız ... @ xiaohouzi79 çözümün her zaman (frist biri hariç) geolocFail ( )
Adriano Rizzo

8

Varsayılan olarak hiçbir zaman aşımı olmadığından bir hata mesajı almazsınız (En azından sanırım). Ben sadece benim için firefox ile aynı sorunu yaşadım firefox her zaman bir zaman aşımı verir. Kendinize böyle bir zaman aşımı ayarlayabilirsiniz.

İşlevim kromda harika çalışıyor ancak firefox'ta her zaman bir zaman aşımı alıyorum.

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

Hatalarınızı dikkatle izlemenizi tavsiye ederim. Her şey için beklenebilir. Her şey için bir yedek planınız olsun. Hem google geolocations hem de navigator geolocations başarısız olduğunda bazı varsayılan değerleri veya veritabanımdaki değerleri kendim kullanıyorum.


7
sadece bir FYI, maximumAge önbellekteki konum verilerinin yaşını ifade eder, sonsuzluk olarak ayarlayarak önbelleğe alınmış bir sürüm elde edeceğinizi garanti eder. 0 olarak ayarlamak, cihazı konumu almaya zorlar.
Porco

maximumAge: Infinity sizi yukarıda işaret edildiği gibi bertaraf edecektir çünkü bu, önbelleğe alınan değeri zorlamak anlamına gelir.
n13

7

2017'de hala sivilceli sonuçlar alıyorum ve bir teorim var: API dokümantasyonu çağrının artık sadece "güvenli bir bağlamda", yani HTTPS üzerinden kullanılabildiğini söylüyor. Geliştirme ortamımda (localhost üzerinde http) sonuç almakta sorun yaşıyorum ve bu yüzden inanıyorum.


Hmm, ilginç. 2020'de bile hala localhost'ta HTTPS ile lapa lapa!
NitroStoutPlz

6

Herkes için yararlı olması durumunda buraya göndereceğim…

İOS Safari'de, navigator.geolocation.getCurrentPositionetkin bir etkinliğimin olması durumunda yapılan aramalar zaman aşımına uğrarnavigator.geolocation.watchPosition işlev çalışıyor uğrar.

Burada açıklandığı watchPositionşekilde kullanarak düzgün bir şekilde başlatma ve durdurma clearWatch(), çalıştı: https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/watchPosition


1
Çok teşekkür ederim. Benim için çözüm buydu.
Qin Zhengquan

5

İşte bir kapatma sayesinde benim çözüm:

  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);

Bu benim için yerli tepki verdi navigator && navigator.geolocation
Ashish Singh Rawat

5

Ben de aynı şeyle karşılaşıyordum. Çalışmış ancak güvenilir olmayan zaman aşımı çözümünü denedim. Ben sadece iki kez ararsanız konum düzgün yenilenir bulundu

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;
}

bu elbette biraz daha yavaş ama bana bir kez yanlış pozisyon vermedim. Ben birkaç kez zaman aşımı vurmak ve başka bir şey dönmez ama o harika çalışır. Bunun hala biraz hileli olduğunu biliyorum ve gerçek çözümü bulan birini dört gözle bekliyorum.

Ya da vazgeçmek isteyene kadar denemeye devam edeceğinden emin olmak istiyorsanız, böyle bir şey deneyebilirsiniz.

//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}
        )
    }       
}

Muhtemelen burada bazı yazım hataları ve bazı yazım hataları var ama umarım bu fikri anlarsınız. Birinin soruları olup olmadığını veya daha iyi bir şey bulup bulamadığını bana bildirin.


4

Bir iPhone uygulamasında çalışan herkes için ...

Kodunuz iOS 9 ve sonraki sürümlerinde bir UIWebView'de çalışıyorsa, NSLocationWhenInUseUsageDescription , uygulamanızın plist'inde .

Ayarlamazsanız getCurrentPosition, asla geri aramaz ve kullanıcıdan hiçbir zaman istenmez.


3

Bu şekilde çalışmadığını gördüm

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

Fakat

bu şekilde mükemmel çalışır

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
İkisi arasındaki fark nedir?
Pardeep Jain

Anonim işlev - adlandırılmış bir vs
1nstinct

gerçekten büyük farklılıklar. Bu ikisinden biri çalışmıyor, teşekkür ederim
withoutOne

3

@ brennanyoung'un cevabı harika, ancak hata durumunda ne yapacağınızı merak ediyorsanız, https://ipinfo.io gibi bir IP coğrafi konum API'sı kullanabilirsiniz. (bu benim hizmetim) . İşte bir örnek:

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);
        });  
    };
});

Daha fazla bilgi için https://ipinfo.io/developers/replacing-getcurrentposition adresine bakın.


İşte bunun için düzeltilmiş bağlantı: ipinfo.io/developers/replacing-getcurrentposition
peater

5
Korkunç. Doğruluk, ABD ve Kanada'da gerçek konumdan 5-7 mil uzakta ve Rusya'nın herhangi bir yerinde 100 mil uzakta gibi.
ekashking

1
Konumun ne olduğu hakkında hiçbir fikrim yok - çok daha iyi uygulamalar için.
Ben Dowling

bu hiçbir yerde çalışmaz. Her istek boylam ve enlemi yanlış olarak alıyor
olmadanOn

Yanlışlıkla ne demek istiyorsun? Bazı örneklerin var mı?
Ben Dowling

2

Benzer sorunları yaşıyorum ve tarayıcıların getCurrentPosition ne sıklıkta çağrılabileceği konusunda sınırlamaları olması olasılığını araştırıyorum. Sıklıkla bir konum alabilirim, ancak sayfayı hemen yenilerim zaman aşımına uğrar. Biraz beklersem, genellikle tekrar yer alabilirim. Bu genellikle FF ile olur. Chrome ve Safari'de getCurrentPosition zaman aşımı süresini henüz fark etmedim. Sadece bir düşünce...

Bunu desteklemek için herhangi bir belge bulamamam da, çok fazla testten sonra geldiğim bir sonuçtu. Belki başka birinin bu konuda bir bilgisi vardır?


İyi bir noktaya değindin. Zaman aşımlarım / başarısızlıklarım çoğunlukla test ettiğimde ve coğrafi konum verilerini tekrar tekrar sorguladığımda gerçekleşiyor gibi görünüyor. Bunun bir hatanın sonucu mu, yoksa önerdiğiniz gibi muhtemelen tasarımdan mı kaynaklandığını merak ediyorum.
Jamie

Tarayıcının konum hizmetlerine yapılan çağrıların sayısını sınırladığı herhangi bir durum görmedim. Ne sıklıkla sorgulama yapıyorsunuz?
Nico Westerdale

2

Sonunda Android'de Firefox, Chrome ve Varsayılan Navigator için çalışan bir sürüm buldum (sadece 4.2 test edildi):

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

Aktarılan ikinci parametre Geolocation.getCurrentPosition(), coğrafi konum hatalarını işlemek istediğiniz işlevdir. Hata işleyici işlevinin kendisi PositionError, coğrafi konum denemesinin neden başarısız olduğuyla ilgili ayrıntıları içeren bir nesne alır . Herhangi bir sorununuz varsa hatayı konsola çıkarmanızı öneririm:

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);
  }
}

Bunu kodumda yaptığınızda, " https://www.googleapis.com/ ' adresindeki ağ konumu sağlayıcısı : Döndürülen hata kodu 400" iletisini gösterdi. Google Chrome, GPS yerleşik olmayan cihazlarda (örneğin, çoğu masaüstü bilgisayar) bir konum almak için Google API'larını kullanıyor. Google, kullanıcının IP adresine göre yaklaşık bir enlem / boylam döndürür. Bununla birlikte , Chrome'un geliştirici sürümlerinde (Ubuntu'daki Chromium gibi) tarayıcı derlemesinde API erişim anahtarı yoktur. Bu, API isteğinin sessizce başarısız olmasına neden olur. Ayrıntılar için bkz. Chromium Sayı 179686: Coğrafi Konum 403 hatası veriyor .


1

Mozilla'da bu sorun var. Tüm zamanlar: Hata: Konum alınırken bilinmeyen bir hata .

Şimdi 47 Mozilla kullanıyorum. Ben her şeyi denedim, ama her zaman bu sorun. ANCAK sonra ben açmak yapılandırma: yaklaşık , benim addsress barda gitmek geo.wifi.ui ve "karşı değer değişti https://location.services.mozilla.com/v1/geolocate?key=test ". İşler!

U varsa Pozisyon yükleme zaman aşımına uğradı hatası, zaman aşımı değerini artırmak için deneyin:

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

1

getCurrentPositionBaşarısız olduğunda bir IP adresi coğrafi konum hizmetini yedek yöntem olarak kullanmak iyi bir fikir olabilir . Örneğin, api https://ip-api.io

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

1

Bizim durumumuzda her zaman ilk kez çalışır, ancak işlevi 3-4 kereden fazla yeniden çalıştırır, başarısız olur.

Basit geçici çözüm: Değerini LocalStorage'da saklayın.

Önce:

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

Sonra:

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

Bu sorunu son zamanlarda kendim fark ettim ve bunun nasıl ortaya çıktığından emin değilim ama bazen firefox önbellekte yüklü bir şeye yapışıyor gibi görünüyor. Önbelleği temizledikten ve firefox'u yeniden başlattıktan sonra tekrar çalışıyor gibi görünüyor.


0

Bu kütüphane , coğrafi konum çağrılarına istenen bir Doğruluk ve maxWait seçeneği ekler; bu, doğruluk belirli bir aralık içinde olana kadar bir konum almaya çalışacağı anlamına gelir.


0

Herkesin katkıları için teşekkürler, bu bana yardımcı oldu.

GetCurrentPosition () yerine watchPosition () kullanmak zorunda kalmanın yanı sıra, çağrıyı document.ready () öğesinden başa taşımam gerektiğini de buldum.


0

Bu, Firefox'un duyarlı tasarım modunu kullanırken bana oldu. Dosyalanmış bir hata raporu var . Şimdilik, Geolocation API'sını kullanırken duyarlı tasarım modunu kullanmayın.


0

Bazılarına yardımcı olabilir, Android'de aynı sorunu vardı ama setTimeout içeride kullanarak anladım, bu document.ready yüzden ikinci kez benim için çalıştı, kullanıcı birkaç saniye sonra konumuna izin verirse zaman aşımını arttırmanız gerekiyor, bu yüzden 60000'e kadar tuttum mili saniye (1 dakika) Kullanıcı 1 dakika içinde izin ver düğmesini tıklarsa başarı işlevimin çağrılmasını sağlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.