在 HTML5 Web Worker 中使用地理定位

Posted

技术标签:

【中文标题】在 HTML5 Web Worker 中使用地理定位【英文标题】:Using Geolocation in a HTML5 Web Worker 【发布时间】:2016-03-22 19:21:55 【问题描述】:

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

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

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

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

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

我正在尝试做的事情可能吗?有什么可以使用的替代品吗?

【问题讨论】:

【参考方案1】:

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

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

由于WorkerNavigator 缺少Geolocation 对象,并且Geolocation 对象无法序列化工作人员,看来您不能在网络中使用Geolocation工人。相反,您必须从主线程进行报告。

【讨论】:

好吧,这令人失望。你知道有什么类似于 web worker 的东西,即使标签不在焦点上也会运行? @Haych 我不是,但也许你可以在 web worker 中运行一个计时器,然后提醒主线程执行 REST 调用?我不确定这是否可行,我还没有尝试过。 关于 w3c repo 的持续讨论始于 2015 年 9 月,讨论可能在 ServiceWorkers 中实施地理定位【参考方案2】:

您可以在this question 找到您的提案的工作示例。它目前仅在 Firefox 的后台运行(出于错误的原因),并且在 W3C/IETF 进行重大制度变更之前不太可能实施。

但和你一样,现实世界中有许多这样的要求,我相信我的提议满足了大部分要求。

【讨论】:

以上是关于在 HTML5 Web Worker 中使用地理定位的主要内容,如果未能解决你的问题,请参考以下文章

iPhone JavaScript Web App 的地理位置

html5 的web worker中不能用jq

如何在 Web 应用程序中请求用户对 html5 地理位置 api 的权限?

html5之Web Worker -- js多线程编程

HTML5 Web Worker 可以/应该使用 CORS 进行跨域吗?

如何在java web应用程序的后台使用html5地理定位