我一直试图弄清楚像 chrome 或 firefox 这样的 html5 浏览器如何在后台执行地理定位,但我遇到了一些困难。
困难
更准确地说,我想知道当一段 javascript 调用navigator.geolocation.getCurrentPosition (success_func)但在 success_func实际被回调之前会发生什么。我想知道浏览器如何获取经纬度坐标。它使用的协议是什么?它查询哪些服务器来获取这些信息?等等。
这是我确定并尝试过的:
- Chrome 和 Firefox 使用附近 wifi 接入点的 MAC 通过将其发送到 googlesapi.com 来获取地理位置。这是我最感兴趣的基于 MAC-wifi 的实现。
- 到
success_func被调用时,浏览器已经获得了地理位置数据。 - 我使用代理和数据包捕获(如 tcpcatcher 和wireshark)取得了有限的进展。我看到正在查询,
googleapis.com:443但当然是通过 tls/ssl 这意味着我无法阅读它。(在 tcpcatcher 中使用 ssl 监视器会导致 geoloc 在浏览器中失败) - 我尝试在浏览器中使用内置的 devtool 和控制台,但它似乎忽略了获取 geoloc 数据的通信。例如,使用 chrome 的 devtool ( ctrl+ shift+ I),它不会显示任何
CONNECT方法或连接,googleapis.com即使 tcpcatcher 在地理定位期间清楚地捕获了它。 - 我试过查看来源来确定这一点,但运气不佳。问题是浏览器代码库非常庞大,并且很难找到相关的类和源文件,尤其是因为我不熟悉它们的整体设计。搜索有趣的关键字仅到此为止。
如果你们试图确定和逆转给定浏览器用来实现地理定位的协议,你们将如何进行?
其他资源
以下是我已经看过的一些我认为有帮助的内容:
- http://samy.pl/mapxss/
- https://stackoverflow.com/questions/3041113/how-exactly-does-html5s-geolocation-work
问题是那里提到的一些信息已过时且不再准确。我现在的目标是弄清楚发生了什么变化以及外部自定义应用程序如何使用该协议本身进行地理定位。