在 HTML5 Web Worker 中使用地理定位

Hay*_*ych 4 html javascript geolocation web-worker

我想使用 HTML5 Web Worker 定期向静态服务器报告经度和纬度 - 即使选项卡未处于焦点状态。我的问题是,我通常访问 HTML5地理定位功能的方式在 Web Worker 中不可用。

我尝试过的是将地理位置对象从我的主文件发送到网络工作人员。但是,这不起作用,我收到以下错误:

未捕获的 DataCloneError:无法在“Worker”上执行“postMessage”:无法克隆对象。

接下来,我尝试导入一个 JavaScript 库,该库提供名为Geolocator 的地理定位服务。但后来我发现我无权访问worker中的库(我认为是因为worker无权访问DOM)。

因此,为了解决这个问题,我将这个 JavaScript 库的源代码直接添加到工作文件中,但这不起作用,因为我无权访问在Geolocatorwindow的源代码中重复使用的内容。

我想做的事情可能吗?我可以使用任何替代方案吗?

Mik*_*uck 7

navigator主线程中的对象包含一个geolocation属性,这是您访问所有地理定位功能的方式。

Workers 包含一个不同的navigator对象,WorkerNavigatornavigator该对象仅包含主线程中的属性的子集。

由于WorkerNavigator缺少Geolocation对象并且该Geolocation对象无法序列化为工作人员,因此您似乎无法Geolocation在网络工作人员内部使用。相反,您必须从主线程进行报告。

  • @Haych我不是,但也许你可以在网络工作线程中运行一个计时器,然后提醒主线程执行REST调用?我不确定这是否有效,我还没有尝试过。 (2认同)