【问题标题】:Geolocation provider for Firefox that allows manual input允许手动输入的 Firefox 地理定位提供程序
【发布时间】:2010-12-20 12:50:57
【问题描述】:

是否有任何简单的方法可以覆盖 geolocation api 的默认行为并硬编码您当前的位置?

我认为这对于测试和隐私原因(提供虚假位置数据)很有用

我以为有一个附加功能,但我似乎找不到。现在唯一的选择似乎是将 about:config geo.wifi.url 更改为一些替代网络服务,我认为这过于复杂。

有什么想法吗?

谢谢

理想场景

有人实现了一个显示谷歌地图的插件,我可以选择一个新的默认位置。

【问题讨论】:

  • 这样一个理想的场景已经实现了——现在 chrome 网上商店有一个 Manual Geolocation chrome 扩展。

标签: javascript geolocation firefox-addon firefox3.5


【解决方案1】:

最简单的方法是导航到about:config,然后在过滤框中输入geo.wifi.uri,双击显示的唯一配置行,替换xxxyyy后输入下面的值使用您从 http://www.getlatlon.com/ 之类的服务获得的坐标:

data:application/json,{"location":{"latitude":xxx,"longitude":yyy,"accuracy":10}}

这个技巧不需要任何附加组件或本地/托管文件。确保该值没有任何空格并且在一行上!

【讨论】:

  • 供参考,该字段的默认值为geoloc://www.google.com/loc/json
  • 在 Firefox 10+ 中使用这个data:application/json,{"location":{"lat":xxx,"lng":yyy,"accuracy":10}}
  • 其实这几天是data:application/json,{"location":{"lat":xxx,"lng":yyy},"accuracy":10}
【解决方案2】:

geo.wifi.uri 不需要是网络服务。您也可以使用 file://...

将其设置为本地 uri

文件应该是一个json文件,内容如下:

{"location": {
              "latitude": 48.777025000000002, 
              "longitude": 9.1713909999999998, 
              "accuracy": 10.0}}

更新: 对于 Firefox 9+,格式已更改:

{
    "status": "OK",
    "accuracy": 10.0,
    "location": {"lat": 48.777, "lng": 9.171}
}

或者您可以将它们结合起来支持两者:

{
    "status": "OK",
    "accuracy": 10.0,
    "location": {
        "lat": 48.777,
        "lng": 9.171,
        "latitude": 48.777,
        "longitude": 9.171,
        "accuracy": 10.0
    }
}

更新:看起来手动设置此首选项被假定 Google 服务的提供商阻止。见Bug 716453 更新 2: geo.wifi.uri 不是 geo.wifi.url

【讨论】:

    【解决方案3】:

    Geolocater 是一个实验性插件,可让您编辑您的地理位置。

    【讨论】:

      【解决方案4】:

      在 Chrome 中,您可以使用 Manual Geolocation chrome 扩展程序。它会让您以图形方式选择手动位置。

      【讨论】:

        【解决方案5】:

        嗯,您不能直接模拟 navigator.geolocation - 也许您可以重构使用它的代码以使用另一个对象 - 比如 customGeoLocation

        在生产中,您只需将customGeoLocation 设置为navigator.geolocation,在测试中使用您使用的任何功能的模拟实现。

        编辑:原来你可以替换 navigator.geolocation 对象上的函数,但如果你使用需要创建模拟对象的模拟库(如 JsMock),这仍然没用。所以你不能用模拟替换navigator.geolocation

        你可以用这种方式来嘲笑自己:

        var getCurrentPositionCalled = false;
        navigator.geolocation.getCurrentPosition = function() { 
          getCurrentPositionCalled = true; 
        };
        
        //Your app code here
        //...
        assert(getCurrentPositionCalled);
        

        【讨论】:

          【解决方案6】:

          我已将谷歌纵横连接到 Firefox 地理定位。这使您可以通过单击鼠标手动更新您在谷歌纵横中的位置,而不是自己查找您的纬度和经度并将其输入到本地文件中。我关于这个主题的文章是Make Firefox Take Geolocation From Google Latitude

          该解决方案需要少量的服务器端编码(我在文章中提供了源代码),但我暂时将此代码作为您可以使用的免费实时服务运行。

          干杯,元编辑

          【讨论】:

            【解决方案7】:

            我创建了一个简单的 Web 应用程序,它用作地理定位端点,您可以将浏览器的 geo.wifi.uri 指向。它与 Google API 规范兼容。要使用它,只需输入以下内容,将 [latitude] 和 [longitude] 替换为所需的值:

            http://geolocation-mocker.phitherek.me/geolocate/[latitude]/[longitude]
            

            它应该可以工作。要检查服务是否已启动,请导航至

            http://geolocation-mocker.phitherek.me

            并检查 HTML 页面是否正确显示。您可以在

            找到这个简单应用程序的源代码

            https://github.com/Phitherek/geolocation-mocker

            我希望这个工具会很有用。

            【讨论】:

              猜你喜欢
              • 2012-04-17
              • 2013-04-23
              • 1970-01-01
              • 2011-10-28
              • 1970-01-01
              • 2016-07-02
              • 1970-01-01
              • 1970-01-01
              • 2023-03-11
              相关资源
              最近更新 更多