看来我们无法在网络工作者中获取传感器数据。我想知道其背后的原因。用例是我正在考虑在工作线程中获取地理位置数据,并且仅将处理后的版本发送到主线程。
对于 GPS,这post说工作线程不支持它(没有给出原因)。我仔细检查了一下,网络工作人员不支持 navigator.geolocation 。对于加速器和陀螺仪,我们有 DeviceOrientationEvent 和 DeviceMotionEvent。但我们需要通过窗口对象来使用它们,而工作线程无法使用它们。同样的情况也适用于环境光事件。
所以我的问题是:
- 为什么 Web Worker 不支持 navigator.geolocation?我没有看到任何理由在工作线程中阻止它。我想应该不会有线程安全或者安全问题。
- navigator.geolocation 属于 navigator 吗?这看起来是个愚蠢的问题。但我无法很快在网上找到一个好的解释...网络工作人员可以访问导航器对象。我很困惑为什么不支持 navigation.geolocation 。
- 为什么我们没有来自加速器和陀螺仪的原始传感器读数?我知道抽象事件很有用。但有些情况我们想使用原始数据进行处理。我发现 PhoneGap 提供了访问原始传感器数据的方法,例如,通过导航器.加速度计。但我的理解是这样的API不属于标准化的HTML规范。
- 有哪些相关的设计决策来决定是否general工作线程是否应该支持传感器读取?目前,HTML 中的通用传感器读取支持已被搁置W3C 设备 API 工作组。看到当前的传感器支持(GPS、加速器、陀螺仪),我认为我们将获得抽象的 DOM 事件。并且它可能通过导航器对象读取原始传感器数据。
好的。阅读了一些 Chromium 代码后,我现在有了问题 2 的答案。其他3个问题我还是没有答案...
问题2的回答:navigator.geolocation属于navigator吗?
navigator.geolocation 仅属于主线程中的 navigator,但不属于工作线程中的 navigator。
主要原因是,尽管工作线程中的导航器看起来与主线程中的导航器完全相同,但这两个导航器在 C++ 端具有独立的实现。这就是工作线程中不支持 navigator.geolocation 的原因。
相关代码在导航器.idl and WorkerNavigator.idl在 Chromium 代码中。可以看到.idl文件中它们是两个独立的接口。它们在绑定的 C++ 端有独立的实现。导航器是一个属性DOM窗口,而 WorkerNavigator 是一个属性工人全球范围.
然而,在 JavaScript 方面,它们具有相同的名称:navigator。嗯,我知道这两个导航器位于两个不同的范围内,因此不存在名称冲突。但是,当我在 JavaScript 中使用 API 时,如果主线程和工作线程具有相同的名称,我预计它们会出现类似的行为。歧义就是这样发生的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)