我正在开发一个使用W3C标准地理位置API的应用程序,但是我终生无法在Windows 7和XP PC的Safari上运行它。它可以在我的iPad和iPhone上正常工作。它也可以在Chrome(5、6、7和Canary版本)和Firefox(3.6)上完美运行。我没有Mac,因此无法对此进行测试。 IE尚不支持地理定位,因此也涵盖了在内。

我创建了一个精简版本,并将其托管在Google Apps Engine上,以便您查看代码:http://html5-geolocator.appspot.com/。所有(简化的)JavaScript都在html中,因此您应该能够右键单击并调试/查看源代码。

这几乎是Google Map API DevGuide上的示例的直接转换。有趣的是,Google托管的示例在Windows 7的Safari 5.0.x中也不起作用(但在与我的应用相同的所有其他平台上也能正常工作),例如http://code.google.com/apis/maps/documentation/javascript/examples/map-geolocation.html与我的APP完全一样,没有 map 出现,网页只是保持灰色。

通过一些调试(警报(“我在这里”):-),似乎在Safari中,它确实执行了navigator.geolocation.getCurrentPosition(myCallback),但似乎从未到达myCallback ...好像从未从getCurrentPosition返回。我还看到,如果整夜打开浏览器窗口,那么当我早上回到浏览器窗口时,就会出现警报和 map (尽管并非总是如此)。我还尝试添加了一个errorCallback navigator.geolocation.getCurrentPosition(myCallback,errorCallback),但它也从不执行该操作,再次表明它从未从getCurrentPosition调用中返回。

为什么会这样?

编辑:
只是做了一些测试,我添加了超时选项(navigator.geolocation.getCurrentPosition(myCallback,errorCallback,{timeout:5000});),实际上,无论我设置了多高,它都会一直超时永远不会从Google地理位置服务返回,但是为什么呢?

最佳答案

尝试打开您的Wi-Fi。似乎Safari依靠wi-fi连接工作。
我遇到了完全相同的问题,打开了wi-fi连接,效果很好。

我现在正在研究如何检测此问题-如果找到解决方案将更新

10-08 16:40