传感器阅读web工作者

时间:2014-02-05 15:10:42

标签: html5 web gps accelerometer sensor

似乎我们无法在网络工作者中获取传感器数据。我想知道背后的原因。用例是我正在考虑在工作线程中获取地理位置数据,并仅将处理后的版本发送到主线程。

对于GPS,此post表示工作线程不支持它(没有给出理由)。我仔细检查了一下,web worker中不支持navigator.geolocation。对于加速器和陀螺仪,我们有DeviceOrientationEvent和DeviceMotionEvent。但我们需要通过窗口对象使用它们,而工作线程无法使用它们。同样的情况也适用于环境光事件。

所以我的问题是:

  1. 为什么web worker不支持navigator.geolocation?我没有看到任何理由在工作线程中阻止它。我认为应该没有线程安全或安全问题。
  2. navigator.geolocation是否属于导航器?这看起来像个愚蠢的问题。但我无法在网上快速找到好的解释......网络工作者可以访问导航器对象。我很困惑为什么不支持navigation.geolocation。
  3. 为什么我们没有加速器和陀螺仪的原始传感器读数?我知道抽象事件很有用。但有些情况下我们希望使用原始数据进行处理。我发现PhoneGap提供了访问原始传感器数据的方法,例如通过navigator.accelerometer。但我的理解是这样的API不属于标准化的HTML规范。
  4. 决定是否应在工作线程中支持一般传感器读数的相关设计决策是什么?根据{{​​3}},HTML中的常规传感器读取支持目前被搁置。看到当前的传感器支持(gps,加速器,陀螺仪),我想我们将获得抽象的DOM事件。并且它可能通过导航器对象获得原始传感器数据读数。

1 个答案:

答案 0 :(得分:2)

行。在阅读了一些Chromium代码后,我现在回答了我自己的问题2。我仍然没有回答其他3个问题......

回答问题2:navigator.geolocation是否属于导航器?

navigator.geolocation仅属于主线程中的导航器,但不属于工作线程中的导航器。

主要原因是即使工作线程中的导航器看起来与主线程中的导航器完全相同,这两个导航器在C ++端也有独立的实现。这就是工作线程中不支持navigator.geolocation的原因。

相关代码位于Chromium代码中的Navigator.idlWorkerNavigator.idl。您可以看到它们是.idl文件中的两个独立接口。并且它们在绑定的C ++端具有独立的实现。导航器是DOMWindow的属性,而WorkerNavigator是WorkerGlobalScope的属性。

但是,在JavaScript方面,它们具有相同的名称:navigator。好吧,我知道这两个导航器在两个不同的范围内,因此没有名称冲突。但是当我在JavaScript中使用API​​时,如果它们具有相同的名称,我期望主线程和工作线程上的类似行为。这就是模糊性的发生。