在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文件):
(参见:https://developer.android.com/guide/topics/location/strategies.html#MockData)
答
DevTools没有进行特征这个,但是如果你碰巧使用getCurrentPosition()
,你可以通过重写代码片段中的函数来重新创建它。
如果您使用的是watchPosition()
(您可能是),我想这个工作流程将不起作用,因为我相信这基本上是一个在浏览器更新坐标时被触发的侦听器。没有办法更新浏览器的坐标。
但是,我将在b/c下面记录工作流程,它可能对其他人有用。
- 将您的脚本存储在snippet中。
-
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);
}
刚刚在带有几个gps位置的选项卡中打开maps.google.com时尝试了此片段。不幸的是,当我手动重新加载页面时,地图上的位置标记只会刷新(一次)。 我认为这是因为google-maps使用'watchPosition()'来持续更新位置(而不是'getCurrentPosition()')? 正如你所提到的,它看起来好像没有办法持续更新浏览器的位置:( 谢谢你分享你的工作流程。 – user2350644