似乎我们无法在网络工作者中获取传感器数据。我想知道背后的原因。用例是我正在考虑在工作线程中获取地理位置数据,并仅将处理后的版本发送到主线程。
对于GPS,此post表示工作线程不支持它(没有给出理由)。我仔细检查了一下,web worker中不支持navigator.geolocation。对于加速器和陀螺仪,我们有DeviceOrientationEvent和DeviceMotionEvent。但我们需要通过窗口对象使用它们,而工作线程无法使用它们。同样的情况也适用于环境光事件。
所以我的问题是:
答案 0 :(得分:2)
行。在阅读了一些Chromium代码后,我现在回答了我自己的问题2。我仍然没有回答其他3个问题......
回答问题2:navigator.geolocation是否属于导航器?
navigator.geolocation仅属于主线程中的导航器,但不属于工作线程中的导航器。
主要原因是即使工作线程中的导航器看起来与主线程中的导航器完全相同,这两个导航器在C ++端也有独立的实现。这就是工作线程中不支持navigator.geolocation的原因。
相关代码位于Chromium代码中的Navigator.idl和WorkerNavigator.idl。您可以看到它们是.idl文件中的两个独立接口。并且它们在绑定的C ++端具有独立的实现。导航器是DOMWindow的属性,而WorkerNavigator是WorkerGlobalScope的属性。
但是,在JavaScript方面,它们具有相同的名称:navigator。好吧,我知道这两个导航器在两个不同的范围内,因此没有名称冲突。但是当我在JavaScript中使用API时,如果它们具有相同的名称,我期望主线程和工作线程上的类似行为。这就是模糊性的发生。