在Chrome上不断模拟GPS位置

时间:2017-04-11 08:59:09

标签: google-chrome android-emulator mocking location google-chrome-devtools

对于移动网络应用程序,我想模拟设备的位置移动。虽然可以使用Chrome浏览器控制台中的传感器选项卡覆盖单个位置(请参阅:https://developers.google.com/web/tools/chrome-devtools/device-mode/device-input-and-sensors),但我希望不断覆盖该位置,例如更新设备的位置每一秒。

是否有可能在Chrome(或任何其他桌面浏览器)中实现此功能?

我正在寻找类似于Android Emulator的解决方案,它允许重放录制的GPS轨道(来自GPX或KML文件): enter image description here

(参见:https://developer.android.com/guide/topics/location/strategies.html#MockData

1 个答案:

答案 0 :(得分:2)

DevTools没有此功能,但如果你碰巧使用getCurrentPosition(),你可以通过覆盖代码片段中的函数来重新创建它。

我认为如果你使用watchPosition()(你可能是),这个工作流程将不起作用,因为我相信这基本上是一个在浏览器更新坐标时被触发的监听器。无法更新浏览器的坐标。

但是,我会在b / c下面记录工作流程,这可能对其他人有用。

  1. 将您的脚本存储在snippet
  2. Override navigator.geolocation.getCurrentPosition()到目标坐标。
  3. 因此,您可以将坐标和时间戳存储在JSON中(在代码段内,或者只是使用XHR / Fetch从代码段中获取JSON),然后使用setTimeout()更新指定时间的坐标

    var history = [
      {
        time: 1000,
        coords: ...
      },
      {
        time: 3000,
        coords: ...
      }
    ];
    
    for (var i = 0; i < history.length; i++) {
      setTimeout(function() {
        navigator.geolocation.getCurrentPosition = function(success, failure) { 
          success({ 
            coords: history[i].coords,
            timestamp: Date.now()
          }); 
      }, history[i].time);
    }