在 HTML5 Web Worker 中使用地理定位

Using Geolocation in a HTML5 Web Worker

我想使用 HTML5 网络工作者定期向 restful 服务器报告经度和纬度 - 即使选项卡未处于焦点。我的问题是我通常访问 HTML5 geolocation 函数的方式在 Web Worker 中不可用。

我尝试的是将地理定位对象从我的主文件发送到网络工作者。但是,那没有用,我收到以下错误:

Uncaught DataCloneError: Failed to execute 'postMessage' on 'Worker': An object could not be cloned.

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

因此,为了解决这个问题,我将这个 JavaScript 库的源代码直接添加到工作文件中,但这没有用,因为我无权访问 windowGeolocator.

的整个源代码中重复使用

我想做的事情可行吗?有没有我可以使用的替代品?

主线程 contains a geolocation property 中的 navigator 对象,这是您访问所有地理定位功能的方式。

Workers 包含一个 different navigator object, known as WorkerNavigator,它仅包含主线程中 navigator 的属性子集。

因为 WorkerNavigator 缺少 Geolocation 对象并且 Geolocation 对象无法序列化 工人,看来你不能在 web worker 中使用 Geolocation。相反,您必须从主线程进行报告。

问题中可以找到您提案的一个工作示例。它目前只能在 Firefox 的后台运行(出于错误的原因),并且在我们在 W3C/IETF.

进行实质性制度变更之前不太可能实施

但是像你一样,在现实世界中有许多这样的要求,我相信我的建议即使不是全部也能满足大多数其中