代码之家  ›  专栏  ›  技术社区  ›  Ryu

允许手动输入的Firefox地理位置提供程序

  •  17
  • Ryu  · 技术社区  · 15 年前

    是否有任何简单的方法可以覆盖 geolocation api 只是硬编码你现在的位置?

    我认为这对于测试和隐私(提供假定位数据)很有用。

    我以为有个附加组件,但我找不到。目前唯一的选择似乎是将about:config geo.wifi.url改为其他Web服务,我认为这过于复杂。

    有什么想法吗?

    谢谢

    理想情景

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

    7 回复  |  直到 9 年前
        1
  •  11
  •   Firefishy Peter Hoffmann    11 年前

    geo.wifi.uri不需要是Web服务。您还可以使用文件:/…将其设置为本地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

        2
  •  13
  •   nikolay    14 年前

    最简单的方法是导航到 about:config 然后在过滤框中输入 geo.wifi.uri ,双击显示的唯一配置行,并在替换后输入以下值 xxx yyy 有了这样的服务 http://www.getlatlon.com/ :

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

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

        3
  •  5
  •   Max Rible Kaehn    15 年前

    Geolocater 是一个实验性的附加组件,允许您编辑地理位置。

        4
  •  1
  •   ronme    13 年前

    在Chrome中,您可以使用 Manual Geolocation 镀铬加长件。它将允许您以图形方式选择手动位置。

        5
  •  0
  •   Igor Zevaka    15 年前

    嗯,你不能嘲笑 navigator.geolocation 直接——也许你可以重构你的代码,用它来使用另一个对象——比如 customGeoLocation .

    在生产中,您可以设置 自定义地理位置 导航器.地理位置 在测试中,使用您所使用的任何功能的模拟实现。

    编辑: 原来你可以在 导航器.地理位置 对象,但如果您使用的是模拟库(如JSmock),它需要创建一个模拟对象,那么这仍然是无用的。所以你不能替换 导航器.地理位置 嘲弄地模仿

    你可以这样嘲笑自己:

    var getCurrentPositionCalled = false;
    navigator.geolocation.getCurrentPosition = function() { 
      getCurrentPositionCalled = true; 
    };
    
    //Your app code here
    //...
    assert(getCurrentPositionCalled);
    
        6
  •  0
  •   MetaEd    14 年前

    我已经将谷歌纬度连接到了火狐地理位置。这可以让你用鼠标点击一次手动更新你在谷歌纬度上的位置,而不是自己查找你的纬度和经度并将其输入到本地文件中。我关于这个问题的文章是 Make Firefox Take Geolocation From Google Latitude .

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

    干杯,MetaEd

        7
  •  0
  •   Phitherek_    9 年前

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

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

    它应该是有效的。要检查服务是否已启动,请导航到

    http://geolocation-mocker.phitherek.me

    并检查HTML页面是否正确显示。您可以在以下位置找到此简单应用程序的源代码:

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

    我希望这个工具会被证明是有用的。