2014-02-05 2 views
2

웹 작업자는 센서 데이터를 얻을 수없는 것으로 보입니다. 나는 그 이유를 궁금해. 유스 케이스에서는 작업자 스레드에서 geolocation 데이터를 가져오고 처리 된 버전 만 주 스레드로 보내는 것에 대해 생각하고 있습니다.웹 작업자의 센서 읽기

GPS의 경우이 post은 작업자 스레드에서 지원되지 않는다 (이유가 없음). 그리고 나는 그것을 두 번 확인했습니다, navigator.geolocation은 웹 작업자에서 지원되지 않습니다. 가속기와 자이로 스코프에는 DeviceOrientationEvent와 DeviceMotionEvent가 있습니다. 그러나 작업자 스레드에서 사용할 수없는 window 객체를 통해이 객체를 사용해야합니다. 앰비 라이트 이벤트에도 동일한 상황이 적용됩니다.

그래서 제 질문은 다음과 같습니다 navigator.geolocation은 웹 노동자에

  1. 를 지원하지 않는 이유는 무엇입니까? 나는 작업자 스레드에서 그것을 막을 이유가 없습니다. 스레드 보안이나 보안 문제가 없어야합니다.
  2. navigator.geolocation은 탐색기에 속합니까? 이것은 어리석은 질문처럼 보입니다. 하지만 빨리 온라인에서 좋은 설명을 찾을 수는 없습니다 ... 웹 작업자는 탐색기 개체에 액세스 할 수 있습니다. 그리고 navigation.geolocation이 지원되지 않는 이유가 혼란 스럽습니다.
  3. 액셀러레이터와 자이로 스코프에서 원시 센서 판독 값이없는 이유는 무엇입니까? 추상화 된 이벤트가 유용하다는 것을 이해합니다. 그러나 처리를 위해 원시 데이터를 사용하려는 경우가 있습니다. PhoneGap은 원시 센서 데이터에 액세스 할 수있는 방법을 제공합니다 (예 : navigator.accelerometer). 그러나 제 이해는 그러한 API가 표준화 된 HTML 사양에 속하지 않는다는 것입니다.
  4. 일반 작업자 스레드에서 센서 읽기가 지원되는지 여부를 결정하는 관련 디자인 결정은 무엇입니까? HTML의 일반 센서 판독 지원은 현재 W3C Device APIs Working Group에 따라 중단됩니다. 현재 센서 지원 (gps, 가속기, 자이로)을 보면, 나는 추상화 된 DOM 이벤트를 얻을 것이라고 생각한다. 그리고 네비게이터 객체를 통해 원시 센서 데이터 판독 값을 가질 가능성이 있습니다.

답변

1

확인. 일부 Chromium 코드를 읽은 후 지금 내 자신의 질문 2에 대한 답변을 얻었습니다. 나는 여전히 다른 3 가지 질문에 답을 가지고 있지 않다. ...

Answer 2 : 네비게이터. 위치가 네비게이터에 속한가?

navigator.geolocation은 기본 스레드의 탐색기에만 속하지만 작업자 스레드의 탐색기에는 속하지 않습니다.

주된 이유는 작업자 스레드의 탐색기가 주 스레드의 탐색기와 완전히 똑같아 보이더라도 두 탐색기는 C++ 측에서 독립적 인 구현을 가지고 있다는 것입니다. 이것이 navigator.geolocation이 작업자 스레드에서 지원되지 않는 이유입니다.

관련 코드는 Chromium 코드에서 Navigator.idlWorkerNavigator.idl입니다. .idl 파일에서 두 개의 독립적 인 인터페이스임을 알 수 있습니다. 그리고 그들은 바인딩의 C++ 측면에 독립적 인 구현을 가지고 있습니다. 네비게이터는 DOMWindow의 속성이고 WorkerNavigator는 WorkerGlobalScope의 속성입니다.

그러나 자바 스크립트 측면에서 이름은 navigator입니다. 두 항법사가 서로 다른 두 가지 범위에 있다는 것을 이해합니다. 따라서 이름 충돌이 없습니다. 그러나 자바 스크립트에서 API를 사용할 때 주 이름과 작업자 스레드가 같은 이름을 가진다면 비슷한 동작을 기대합니다. 그것이 모호한 태도입니다.