在Chrome上连续模拟GPS位置

问题描述:

对于移动Web应用程序,我想模拟设备的位置移动。虽然可以在Chrome开发人员控制台中使用“传感器”标签覆盖单个位置(请参阅:https://developers.google.com/web/tools/chrome-devtools/device-mode/device-input-and-sensors),但我想不断地覆盖该位置,例如说每秒更新设备的位置。在Chrome上连续模拟GPS位置

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

我正在寻找类似Android模拟器的解决方案,它允许重放记录的GPS轨迹(从GPX或KML文件): enter image description here

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

DevTools没有进行特征这个,但是如果你碰巧使用getCurrentPosition(),你可以通过重写代码片段中的函数来重新创建它。

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

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

  1. 将您的脚本存储在snippet中。
  2. Override navigator.geolocation.getCurrentPosition()到目标坐标。

所以,你可以在坐标和时间戳存储在JSON(将代码段内,或使用XHR只是获取从片段中的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); 
} 
+0

刚刚在带有几个gps位置的选项卡中打开maps.google.com时尝试了此片段。不幸的是,当我手动重新加载页面时,地图上的位置标记只会刷新(一次)。 我认为这是因为google-maps使用'watchPosition()'来持续更新位置(而不是'getCurrentPosition()')? 正如你所提到的,它看起来好像没有办法持续更新浏览器的位置:( 谢谢你分享你的工作流程。 – user2350644