在HTML5 Web Worker中使用地理位置定位

4
我希望使用HTML5 Web Worker定期上报经纬度到RESTful服务器,即使浏览器标签不在焦点中。我的问题是,我通常访问HTML5 geolocation函数的方式在Web Worker中不可用。
我尝试将地理位置对象从我的主文件发送到Web Worker,但是失败并出现以下错误:
Uncaught DataCloneError: Failed to execute 'postMessage' on 'Worker': An object could not be cloned.
接下来,我尝试导入一个名为Geolocator的JavaScript库,该库提供了地理定位服务。但后来我发现Web Worker无法访问该库(我认为这是因为Web Worker无法访问DOM)。

因此,为了解决这个问题,我直接将这个JavaScript库的源代码添加到工作文件中,但是这并没有起作用,因为我无法访问Geolocator源代码中反复使用的window

我正在尝试的方法可行吗?有什么替代方案可以使用吗?

2个回答

6

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

Worker 包含一个 不同的 navigator 对象,称为 WorkerNavigator,它仅包含主线程中 navigator 的部分属性。

由于 WorkerNavigator 缺少 Geolocation 对象且无法将 Geolocation 对象序列化 worker 中,因此似乎无法在 web worker 中使用 Geolocation。相反,您必须从主线程进行报告。


好吧,这很令人失望。你知道有没有类似于 Web Workers 的东西,即使选项卡不在焦点中也会运行? - Haych
2
@Haych 我不确定,但是也许你可以在网络工作线程中运行一个计时器,然后警告主线程执行REST调用?我不确定这是否有效,因为我没有尝试过。 - Mike Cluck
关于在ServiceWorkers中可能实现地理位置的讨论正在w3c repo上进行,该讨论始于2015年9月。 - piotr_cz

0

您的提案有一个工作示例,可以在this问题中找到。目前它只在Firefox的后台工作(出于错误原因),并且在W3C / IETF进行重大政权变革之前不太可能得到实施。

但是像您一样,在现实世界中存在着许多这样的需求,我相信我的提案大部分甚至全部都能够满足。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接