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

Joh*_*xis 11 javascript firefox html5 google-chrome

当我尝试测试我的"navigator.geolocation.getCurrentPosition"网页时,我的行为很奇怪.这是我的测试结果和代码:

我的代码:

function detectLocation() 
{
  if (navigator.geolocation) 
  {
    navigator.geolocation.getCurrentPosition(geocodePosition, onError, { timeout: 30000 });
    navigator.geolocation.watchPosition(watchGeocodePosition);
  } 
  else 
  {
    onError();
  }
}
Run Code Online (Sandbox Code Playgroud)

调用"body"onload事件时运行此函数.我曾尝试将超时更改为10000和20000,但我仍然得到相同的结果.我也允许crome和firefox来获取我的位置.

结果:

  1. 使用chrome(v 17.0.963.79 m),当调用navigator.geolocation.getCurrentPosition时,结果总是转到onError函数.
  2. 使用Firefox(v 10.0.2),当调用navigator.geolocation.getCurrentPosition时,结果总是转到onError函数.
  3. 使用IE(第9版),结果很棒,我得到了我当前的位置.

谁可以在这种奇怪的情况下帮助我?我真的没有任何想法来解决这个问题,我在项目截止日期前赶时间.谢谢你.

编辑: 在这几天我取得了一些进展,错误代码为2,并在"https://maps.googleapis.com/maps/api/browserlocation/json?browser=chromium&sensor=true"上显示消息"网络位置提供商:回应是错误的".还没有解决,有谁知道如何解决这个问题?

aja*_*yel 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>
Run Code Online (Sandbox Code Playgroud)

  • 我要添加一件事,localhost也没有用.只有适当的公共托管才能使用"navigator.geolocation".此外,如果您的ISP未正确设置专用域服务器,navigator.geolocation将不起作用.看起来这是客户端脚本,但它在很大程度上取决于服务器或域设置. (3认同)

luk*_*ner 12

我也收到了这条消息:

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

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


Geo*_*lou 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}
    );
}  
Run Code Online (Sandbox Code Playgroud)