2012-02-02 129 views
1

我必须在这里做错事,但我找不到...我为公司网站制作一个页面,除其他外,根据用户的当前位置为工作地点提供路线。为了获得他们的位置,我使用了Firefox中实现的Geolocation API(我正在使用FF9和现在的FF10进行测试)。就目前而言,我与在示例代码测试Wikipedia article地理定位API不起作用,谷歌地图也不是“我的位置”

<html> 
<head> 
<title>Geolocation Test</title> 
<script type='text/javascript'> 
var gl; 

function displayPosition(position) { 
    var p = document.getElementById("p"); 
    p.innerHTML = "<table border='1'><tr><th>Timestamp</th><td>" + position.timestamp + 
    "<tr><th>Latitude (WGS84)</th><td>" + position.coords.latitude + " deg</td></tr>" + 
    "<tr><th>Longitude (WGS84)</th><td>" + position.coords.longitude + " deg</td></tr></table>"; 
} 

function displayError(positionError) { 
    alert("error " + positionError.code); 
} 

try { 
    if (typeof navigator.geolocation === 'undefined'){ 
    gl = google.gears.factory.create('beta.geolocation'); 
    } else { 
    gl = navigator.geolocation; 
    } 
} catch(e) {} 

if (gl) { 
    gl.getCurrentPosition(displayPosition, displayError); 
} else { 
    alert("Geolocation services are not supported by your web browser."); 
} 
</script> 

<body> 
<p id='p'></p> 
</body> 
</html> 

(复制/粘贴到文本编辑器,另存为“whatever.html”,并将该文件拖动到浏览器打开它)

非常简单的代码,它实际上运行良好,上周四,01/26/12。 (我知道,我知道,人们说,“它昨天工作了!”,当他们真的搞砸了,但我发誓它真的做到了。)从那以后,它一直给我错误代码2,“POSITION_UNAVAILABLE”。我在工作网络上使用我的工作计算机,家中互联网上的工作计算机和家用计算机以及我的手机上的工作计算机在WiFi热点上进行了试用,并且每次都给出错误代码2。

我想也许我会莫名其妙地在我的浏览器或我的网络设置或东西(虽然我无法想象)疯玩的东西了,所以我试了下测试,每个人都应该能够做到:

  1. 转到maps.google.com。
  2. 搜索“西雅图”(或其他位置,无论)。
  3. 点击“查询路线”按钮。
  4. 在左边的指示框中,“A”应该说“我的位置”,“B”应该说“西雅图”。 (如果A中没有提及“我的位置”,请在框中键入“m”,并且自动填充下拉菜单通常会将“我的位置”作为第一个选项。)
  5. 单击“取得方向”按钮。
  6. Firefox应该弹出消息说maps.google.com想知道您的位置。点击“分享位置”。
  7. 几秒钟后,它应该会显示您从某处(无论它认为您的服务器在哪里)到西雅图的方向,或者“A”框应该变为空白,并且会显示“无法找到您的位置”或类似朝向地图的顶部。

这是奇怪的事情:我从来没有得到这个在任何计算机上工作。我的工作电脑(在FF10和Chrome上),我的同事电脑,我的家用电脑和我的GF工作电脑都做同样的事情;没有人可以找到位置。

所以我的问题是:是位置API下跌或什么,或者我搞砸了吗?我一直无法在网上找到API停机的迹象,而且看起来中断的可能性不大,但如果是这样,为什么它在我尝试过的任何计算机上都无法工作?其他人是否可以复制这些发现或知道我做错了什么?

谢谢!

回答

1

你的脚本能正常工作,并在谷歌地图的定位功能,以及(FF9.0.1)

你在哪里? (我的意思是身体)如果您身处偏远的地方,Google可能无法计算您的位置!尝试在一些大城市也许...

另一种可能性是,您无法访问Google的位置服务器,就好像您的ISP阻止它...

+0

是的,API已启动并正在运行。由于您已经尝试了属于多人的电脑,因此我也排除您将浏览器设置为永远不会共享您的位置。这听起来似乎更合理,因为你的浏览正在尝试,但因为某些事情正在发展而失败。 – miguev 2012-02-02 00:42:44

+0

我在俄勒冈州的波特兰。我希望谷歌知道那是什么。 :)我可以看到一个ISP阻止它,但我已经尝试了至少应该有四个独立的提供者:我的工作互联网访问实际上是通过内部网连接到东海岸某处的外部世界,然后我的家庭互联网ISP,我的Android手机的wifi热点,以及我的GF的工作连接。它会弹出一个框询问我是否想每次分享位置,以便该部分工作正常,但随后会返回错误代码2和我的测试代码,并且无法在Google地图上找到“我的位置”。 – Sam 2012-02-02 14:58:29

0

您的脚本似乎在Chrome中工作,但不在FF中。我在FF中遇到的错误是位置不可用,这意味着FF的位置服务无法访问我的wifi网络。我假设你收到的错误是你的警报错误2?

如果你使用Firebug,你可以在第15行设置一个停止点。当它停止时,点击右边的Watch面板中的positionError,看看代码是什么。矿读:代码2转换为不可用。

我建议你有一些其他的代码来处理这个实例。

+0

positionError.code在JS警报框中被放出;每次都是代码2。据我所知,只要您有任何类型的互联网接入,地理定位API就应该能够正常工作,并且在许多情况下,实际上WiFi应该更加准确,因为Google已经绘制了一堆wifi热点的位置。但这就是为什么我尝试了多台计算机和连接类型。在我的公司内部网上的生产代码中,我确实有代码来处理找不到位置(它会选择默认值),但找不到位置会使其不太有用。 – Sam 2012-02-02 15:02:14

+0

好吧,3分:1)谷歌可能没有映射所有的内部wifi网络,可能实际上不知道它们在哪里。 2)不确定为什么FF在Chrome没有获得位置时,他们应该使用相同的位置提供商。无论浏览器是否得到相同的结果? 3)这是一个内部唯一的网站?如果是这样,您可能需要升级到Google Maps for Business,Google的企业版。 – 2012-02-02 15:17:49

+0

我以为Geolocation API至少应该通过你的IP地址得到你ISP的位置,如果它不知道WiFi点在哪里的话。无论如何,正如我在文章中指出的,Chrome无法在Google地图中找到该位置。使用简单的HTML测试代码,甚至在将选项设置为“允许所有站点跟踪我的物理位置”之后,它甚至不会弹出消息询问我是否要共享位置。测试代码给出错误代码1,“PERMISSION_DENIED”。 – Sam 2012-02-02 15:24:55