navigator.geolocation.getCurrentPosition在chrome和firefox中总是失败

时间:2012-03-16 04:37:13

标签: javascript html5 firefox google-chrome

当我试图测试我时,我的行为很奇怪 “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来获取我的位置。

结果:

  1. 使用chrome(v 17.0.963.79 m),结果始终为onError 调用navigator.geolocation.getCurrentPosition时的函数。
  2. 使用Firefox(v 10.0.2),结果总是转到onError函数 当navigator.geolocation.getCurrentPosition被调用时。
  3. 使用IE(第9版),结果太棒了,我得到了我当前的位置。
  4. 在这种奇怪的情况下,谁能帮助我?我真的没有任何想法来解决这个问题,我在项目截止日期前赶时间。谢谢你。

    编辑: 这几天我取得了一些进展,错误代码为2,消息“网络位置提供商位于'https://maps.googleapis.com/maps/api/browserlocation/json?browser=chromium&sensor = true':响应格式错误“。还没有解决,有谁知道如何解决这个问题?

7 个答案:

答案 0 :(得分:16)

我模拟了这个问题,发现只有当html页面托管在Web服务器上而不是从文件系统打开时才调用成功回调函数。

要测试我直接从我的C:驱动器打开文件,回调不起作用,然后在Internet信息服务(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>

答案 1 :(得分:12)

我也收到了这条消息:

  

消息:“网址位置提供商位于'https://www.googleapis.com/':已返回错误代码404.”,代码:2

我可以通过打开我的wifi适配器来解决它

答案 2 :(得分:8)

我有同样的问题。 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}
    );
}  

答案 3 :(得分:1)

您需要使用https,而不是http。

此处的Chrome参考资料位于此处 - https://developers.google.com/web/updates/2016/04/geolocation-on-secure-contexts-only

答案 4 :(得分:0)

我知道这是一个老话题,但最近我也遇到了这个错误:

message: "Network location provider at 'https://www.googleapis.com/' : Returned error code 404.", code: 2

修复方法是获取谷歌地图的api密钥并在代码中使用它

<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 :(得分:0)

我有同样的问题和解决方案是增加超时持续时间,因为移动网络比有线网络慢

 {timeout: 30000, enableHighAccuracy: true, maximumAge: 75000}

以及启用细胞定位

  

在设备设置中,启用“Wifi和蜂窝定位”选项。

答案 6 :(得分:-3)

这将打印您位置的纬度和经度

<!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>

enter image description here