在 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 的地理位置
如何在 Web 应用程序中请求用户对 html5 地理位置 api 的权限?