Ich habe ein Problem sehr ähnlich zu this one, aber dachte, dass es auf eine besonders grundlegende Art und Weise genug genug war, um seine eigene Frage zu rechtfertigen. Ich habe eine Seite, die den Standort des Benutzers einmal alle 2 Sekunden anfordert (sehr häufig, ich weiß, aber es ist für einen Zweck), getCurrentPosition()
verwendend. Hier ist mein Code:JavaScript Geolocation sporadisch in IE
function locationWrapper() {
if (!navigator.geolocation) {
success = false;
console.log("Geolocation is not supported by this browser")
}
if (success) {
navigator.geolocation.getCurrentPosition(
recordPosition, catchError, { enableHighAccuracy: false }
);
}
}
Die recordPosition()
Funktion wirklich tut nichts relevant (und wird nur selten erreicht) auf die Frage. catchError
sieht so aus:
function catchError(error) {
console.log(error);
switch (error.code) {
case error.PERMISSION_DENIED:
console.log("User denied the request for Geolocation.");
case error.POSITION_UNAVAILABLE:
console.log("Location information is unavailable.");
break;
case error.TIMEOUT:
console.log("The request to get user location timed out.");
break;
case error.UNKNOWN_ERROR:
console.log("An unknown error occurred.");
break;
}
}
Alle ziemlich einfach. Dies funktioniert perfekt in Chrome und nur manchmal in IE. Das ist die verwirrende Sache. Es wird einmal am Anfang des JS-Dokuments und dann einmal alle 2 Sekunden von einer setInterval()
-Funktion aufgerufen. Die erste immer funktioniert, und in dem Intervall funktioniert es etwa einmal in 20-mal, aber sonst gibt die unglaublich hilfreich POSITION_UNAVAILABLE
Fehler zurück.
Ich habe versucht:
Ändern der
enableHighAccuracy
Option ingetCurrentPosition()
false
zu sein, wie es in meinem Codegesehen werden Sicherstellen, dass es keine Probleme mit den Berechtigungen in IE
Verlängerung der Intervallzeit auf 5 Sekunden
Jede Eingabe wird sehr geschätzt.
EDIT:
Es ist speziell IE11. Tut mir leid, dass ich das verpasst habe.
EDIT 2:
ich das gleiche Verhalten sehen this example verwenden. Das erste Mal funktioniert (zeigt Koordinaten an), aber danach zeigt es nur einen Fehler, bis ich neu lade.