Navigator.geolocation.getCurrentPosition всегда терпит неудачу в chrome и firefox
У меня странное поведение, когда я пытался проверить свои
Веб-страница "navigator.geolocation.getCurrentPosition". Вот мой
результат тестирования и код:
мой код:
function detectLocation()
{
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(geocodePosition, onError, { timeout: 30000 });
navigator.geolocation.watchPosition(watchGeocodePosition);
}
else
{
onError();
}
}
эта функция запускалась при вызове события "body" onload. Я попытался изменить тайм-аут до 10000 и 20000, но у меня все тот же результат. Я также разрешил crome и firefox получать мое местоположение.
результат:
- Используя хром (v 17.0.963.79 м), результат всегда попадает в onError
когда вызывается navigator.geolocation.getCurrentPosition.
- Использование Firefox (v 10.0.2), результат всегда включался в функцию onError
когда был вызван navigator.geolocation.getCurrentPosition.
- Используя IE (v 9), результат был фантастическим, я получил свое текущее местоположение.
Может ли кто-нибудь помочь мне в этой странной ситуации? Я действительно не имел никакого представления, чтобы решить эту проблему, и я спешил в свой срок проекта. Спасибо, прежде.
РЕДАКТИРОВАТЬ:
За пару дней я получил некоторый прогресс, код кода ошибки - 2 с сообщением "Поставщик местоположения сети" на странице https://maps.googleapis.com/maps/api/browserlocation/json?browser=chromium&sensor=true ': Ответ был искажен ". Все еще не решен, кто-нибудь знает, как это решить?
Ответы
Ответ 1
Я смоделировал эту проблему и обнаружил, что функции обратного вызова успеха вызывались только при размещении html-страницы на веб-сервере, а не при открытии из файловой системы.
Чтобы проверить, я открыл файл непосредственно с моего диска C: и обратные вызовы не работали, а затем размещали файл в Internet Information Services (IIS), и обратные вызовы действительно работали.
<html>
<body onload="detectLocation()">
<!-- This html must be hosted on a server for navigator.geolocation callbacks to work -->
<div id="status"></div>
<script type="text/javascript">
function detectLocation()
{
log("detectLocation() starting");
if (navigator.geolocation)
{
log("navigator.geolocation is supported");
navigator.geolocation.getCurrentPosition(geocodePosition, onError, { timeout: 30000 });
navigator.geolocation.watchPosition(watchGeocodePosition);
}
else
{
log("navigator.geolocation not supported");
}
}
function geocodePosition(){
log("geocodePosition() starting");
}
function watchGeocodePosition(){
log("watchGeocodePosition() starting");
}
function onError(error){
log("error " + error.code);
}
function log(msg){
document.getElementById("status").innerHTML = new Date() + " :: " + msg + "<br/>" + document.getElementById("status").innerHTML;
}
</script>
</body>
</html>
Ответ 2
Я также получил это сообщение:
сообщение: "Поставщик сетевых адресов на странице https://www.googleapis.com/": Код ошибки возврата 404. ", код: 2
Я мог бы решить эту проблему, включив адаптер wifi
Ответ 3
У меня была такая же проблема. Браузер Chrome не возвращает позицию на 30000 миллисекунд. Firefox тоже не возвращал позицию. Я добавил параметр enableHighAccuracy и установил его в false, но ничего не изменилось (false - это опция по умолчанию). Когда я изменяю его на true, тогда геолокация начала работать!
Это мой последний код,
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
function(position) {
// Get current cordinates.
positionCords = {"lat": position.coords.latitude, "lng": position.coords.longitude};
},
function(error) {
// On error code..
},
{timeout: 30000, enableHighAccuracy: true, maximumAge: 75000}
);
}
Ответ 4
Я знаю, что это старая тема, но в последнее время у меня тоже была эта ошибка:
message: "Network location provider at 'https://www.googleapis.com/' : Returned error code 404.", code: 2
Исправление состоит в том, чтобы получить ключ api для карт Google и использовать его в вашем коде
<script src='https://maps.googleapis.com/maps/api/jscallback=initMap
&signed_in=true&key=YOUR-API-KEY' async defer></script>
Здесь вы можете получить API KEY: https://developers.google.com/maps/documentation/javascript/get-api-key#key
Ответ 5
У меня была такая же проблема, и решение заключалось в увеличении продолжительности таймаута, поскольку мобильная сеть работает медленнее, чем проводная сеть.
{timeout: 30000, enableHighAccuracy: true, maximumAge: 75000}
наряду с разрешением сотовой позиционирования
В настройках устройства включите опцию "Wifi and Cellular positioning".
Ответ 6
Вам нужно использовать https, а не http
Ответ 7
Это напечатает широту и долготу вашего местоположения
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script>
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
alert("Geolocation is not supported by this browser.");
}
}
function showPosition(position) {
document.getElementById('idLatitude').value = position.coords.latitude;
document.getElementById('idLongitude').value = position.coords.longitude;
}
</script>
</head>
<body onload="getLocation()">
<form action="HelloWorld" method="post">
<input id="idLatitude" type="text" name="strLatitude">
<input id="idLongitude" type="text" name="strLongitude">
</form>
</body>
</html>
![введите описание изображения здесь]()