1. 소개
이 섹션은 규범적이지 않습니다.
이 명세는 호스트 디바이스의 물리적 방향과 움직임에 대한 정보를 획득할 수 있는 두 가지 새로운 DOM 이벤트를 제공합니다. 이벤트에서 제공되는 정보는 원시 센서 데이터가 아니라, 정보의 근본적인 출처에 독립적인 고수준 데이터입니다. 일반적인 정보 출처로는 자이로스코프, 나침반, 가속도계 등이 있습니다.
deviceorientation
이벤트는 디바이스의 물리적 방향을 나타내며, 로컬 좌표계에서 일련의 회전으로 표현됩니다.
devicemotion
이벤트는 디바이스의 가속도를 나타내며, 디바이스에서 정의된 좌표계의 직교 좌표로 표현됩니다. 또한 디바이스가 로컬 좌표계에서 회전하는 속도도 제공합니다. 실제로 가능한 경우, 이벤트는 디바이스의
질량 중심의 가속도를 제공해야 합니다.
다음 코드 예제는 이벤트의 기본적인 사용법을 보여줍니다.
deviceorientation
이벤트를 수신하도록 등록하기:
window. addEventListener( "deviceorientation" , event=> { // event.alpha, event.beta, event.gamma 처리 }); // 또는... window. ondeviceorientation= event=> { // event.alpha, event.beta, event.gamma 처리 };
{ alpha: 90 , beta: 0 , gamma: 0 };
나침반 방위를 얻으려면 alpha
값을 360도에서 빼면 됩니다. 디바이스를 수평면에서 회전시키면, 나침반 방위는 (360 - alpha)로 계산됩니다.
beta
값은 90이 되며, alpha
와 gamma
값에 관계없이 항상 90입니다.
{ alpha: 270 - alpha, beta: 0 , gamma: 90 };
devicemotion
이벤트를 수신하도록 등록하기:
window. addEventListener( "devicemotion" , ( event) => { // event.acceleration, event.accelerationIncludingGravity, // event.rotationRate, event.interval 처리 }); // 또는... window. ondevicemotion= ( event) => { // event.acceleration, event.accelerationIncludingGravity, // event.rotationRate, event.interval 처리 };
acceleration
값이 0이고, accelerationIncludingGravity
값은 다음과 같습니다:
{ x: 0 , y: 0 , z: 9.8 };
accelerationIncludingGravity
값이 0이고, acceleration 값은 다음과 같습니다:
{ x: 0 , y: 0 , z: - 9.8 };
acceleration
과 accelerationIncludingGravity
의 x 성분이 양수로 기록됩니다.
또한 rotationRate
.gamma
값은 음수로 기록됩니다:
{ acceleration: { x: v^ 2 / r, y: 0 , z: 0 }, accelerationIncludingGravity: { x: v^ 2 / r, y: 9.8 , z: 0 }, rotationRate: { alpha: 0 , beta: 0 , gamma: - v/ r* 180 / pi} };
2. 범위
이 섹션은 규범적이지 않습니다.
이 명세의 범위에는 호스트 디바이스의 물리적 방향 및 움직임을 나타내는 이벤트가 포함됩니다. 방향 데이터 변환 라이브러리와 같은 데이터 조작 유틸리티, 원시 센서 데이터 접근 또는 센서와 직접 인터페이스하는 방법 등은 범위에 포함되지 않습니다.
3. 모델
3.1. 디바이스 방향
이 명세는 디바이스의 물리적 방향을 구현 정의 기준 좌표계에 대한 일련의 회전으로 표현합니다.
회전 단계의 시퀀스는 Z - X' - Y'' 타입의 내적 테이트-브라이언 각([EULERANGLES])으로, 디바이스 좌표계에 적용됩니다. 이 좌표계는 [ACCELEROMETER]에 정의되어 있으며, 요약은 다음과 같습니다:
-
x는 화면 또는 키보드 평면에 있으며, 화면 또는 키보드의 오른쪽 방향이 양수입니다.
-
y는 화면 또는 키보드 평면에 있으며, 화면 또는 키보드의 위쪽 방향이 양수입니다.
-
z는 화면 또는 키보드에 수직이며, 화면 또는 키보드 밖 방향이 양수입니다.
휴대폰이나 태블릿 같은 모바일 디바이스의 경우, 디바이스 좌표계는 화면의 표준 방향(일반적으로 세로)에 따라 정의됩니다. 이는 슬라이드 아웃 키보드와 같은 요소가 펼쳐지지 않고, 회전 가능한 디스플레이와 같은 요소가 기본 위치로 접혀 있는 상태를 의미합니다.
디바이스가 회전하거나 슬라이드 아웃 키보드가 펼쳐져 화면의 방향이 바뀌어도, 좌표계의 방향은 디바이스에 대해 변하지 않습니다.
노트북 컴퓨터의 경우 디바이스 좌표계는 내장 키보드를 기준으로 정의됩니다.
참고: 화면 방향 변화를 감지하려는 개발자는 [SCREEN-ORIENTATION]을 참고할 수 있습니다.
회전은 오른손 규칙을 사용하므로, 축의 양의 방향에서 볼 때 축을 따라 시계 방향으로 회전하면 양수입니다.
참고: 이 명세에서 사용하는 좌표계는 CSS Transforms
2 § 4 Transform Rendering Model과 다르며, CSS에서는 y축이 아래쪽이 양수이고 회전은 왼손 규칙을 따릅니다.
또한, rotateSelf()
및 rotate()
( [GEOMETRY-1] 참고 )는 Z - Y' - X'' 순서로 회전을 적용하며, 이 명세의 순서와
다릅니다.
alpha
,
beta
그리고 gamma
로 나타내는 회전은 다음 단계로 수행됩니다:
-
디바이스 프레임을 z 축을 기준으로
alpha
도만큼 회전합니다.alpha
값은 [0, 360) 범위입니다.초기 위치의 디바이스로, 기준( XYZ )과 바디( xyz ) 프레임이 일치된 상태입니다. 디바이스가 z축을 중심으로 alpha 각도만큼 회전한 모습. 이전 x, y축 위치는 x0, y0로 표시됨. -
디바이스 프레임을 x 축을 기준으로
beta
도만큼 회전합니다.beta
값은 [-180, 180) 범위입니다.디바이스가 새로운 x축을 중심으로 beta 각도만큼 회전한 모습. 이전 y, z축 위치는 y0, z0로 표시됨. -
디바이스 프레임을 y 축을 기준으로
gamma
도만큼 회전합니다.gamma
값은 [-90, 90) 범위입니다.디바이스가 새로운 y축을 중심으로 gamma 각도만큼 회전한 모습. 이전 x, z축 위치는 x0, z0로 표시됨.
참고: 이 각도 선택은 수학적 관례를 따르지만, alpha는 나침반 방위와 반대 방향입니다. 또한 각도가 차량 동역학에서 사용되는 롤-피치-요 관례와 일치하지 않습니다.
3.1.1. 참조 좌표계 선택
디바이스의 방향은 항상 다른 좌표계에 대해 상대적으로 표현되며, 선택된 좌표계는 방향 정보의 성격과 데이터의 출처에 영향을 줍니다.
상대 디바이스 방향은 가속도계와 자이로스코프로 측정되며, 기준 좌표계는 임의적입니다. 따라서 방향 데이터는 디바이스의 초기 위치로부터의 변화를 나타냅니다.
참고: 네이티브 플랫폼 용어로는 Windows의 OrientationSensor 의 상대 센서, Android의 게임 회전 벡터 센서, 또는 Core Motion의 xArbitraryZVertical 옵션과 유사합니다.
절대 방향은 가속도계, 자이로스코프, 자기장계로 측정되며, 기준 좌표계는 지구 기준 좌표계입니다.
참고: 네이티브 플랫폼 용어로는 Windows의 OrientationSensor 의 절대 센서, Android의 회전 벡터 센서, 또는 Core Motion의 xMagneticNorthZVertical 옵션과 유사합니다.
3.2. 디바이스 움직임
이 명세는 디바이스의 공간 내 움직임을 가속도와 회전 속도로 표현하며, 이는 가속도계와 자이로스코프에서 얻어집니다. 데이터는 이전 섹션에서 요약한 디바이스 좌표계를 기준으로 제공됩니다.
가속도는 디바이스의 속도가 시간에 따라 변하는 비율입니다. 단위는 m/s2 (초당 미터 제곱)입니다.
선형 디바이스 가속도는 중력의 영향 없이 디바이스의 가속도를 나타냅니다. 디바이스가 테이블 위에 평평하게 놓여 있으면 선형 가속도 값은 0 m/s2입니다.
가속도가 중력을 포함하면, 그 값은 중력의 영향을 포함하며 고유 가속도([PROPERACCELERATION])를 나타냅니다. 디바이스가 자유 낙하 중일 때, 가속도는 0 m/s2입니다. 이는 많은 애플리케이션에서 덜 유용하지만, 자이로스코프가 없는 등의 이유로 선형 가속도를 제공할 수 없는 구현에서 최선의 지원을 제공하기 위한 수단으로 제공됩니다.
참고: 실제로 중력을 포함한 가속도는 Motion Sensors Explainer § accelerometer 또는 [G-FORCE]에서 가져온 원시 측정값을 나타냅니다. 반면 선형 가속도는 Motion Sensors Explainer § linear-acceleration-sensor의 측정값을 제공하며, 센서 융합 결과일 가능성이 높습니다. [MOTION-SENSORS]와 [ACCELEROMETER]에는 다양한 가속도계 및 측정할 수 있는 가속도 유형에 대한 보다 상세한 논의가 있습니다.
회전 속도 는 디바이스 좌표계에서 지정된 축을 기준으로 디바이스가 회전하는 속도를 측정합니다. 디바이스 방향과 마찬가지로 회전은 오른손 규칙을 따라야 하며, 축의 양의 방향에서 볼 때 시계 방향이 양수입니다. 회전 속도는 초당 도(deg/s) 단위로 측정됩니다.
참고: [MOTION-SENSORS]와 [GYROSCOPE]에는 자이로스코프, 회전 속도 및 측정에 대한 보다 상세한 논의가 포함되어 있습니다.
4. 권한
DeviceMotionEvent.requestPermission()
와 DeviceOrientationEvent.requestPermission()
테스트의 낮은 통과율 때문입니다. 이 명세는 강력한 기능이며, 다음과 같은 권한을 정의합니다. 이 권한들은 다음 정책 제어 기능이며, 아래와 같은 기본 허용 목록을 가집니다:
-
상대 방향 데이터를 제공할 때, deviceorientation 이벤트는 디스패치되려면 "accelerometer"와 "gyroscope" 권한이 허가되어야 합니다. 구현이 절대 방향 데이터로 대체되려면 "magnetometer" 권한도 허가되어야 합니다.
-
deviceorientationabsolute 이벤트는 디스패치되려면 "accelerometer", "gyroscope", "magnetometer" 권한이 허가되어야 합니다.
-
devicemotion 이벤트는 디스패치되려면 "accelerometer"와 "gyroscope" 권한이 허가되어야 합니다.
5. 작업 소스
작업 소스는 이 명세에서 언급된 작업에 대해 디바이스 움직임 및 방향 작업 소스입니다.
6. API
6.1. deviceorientation 이벤트
partial interface Window { [SecureContext ]attribute EventHandler ondeviceorientation ; }; [Exposed =Window ,SecureContext ]interface :
DeviceOrientationEvent Event {(
constructor DOMString ,
type optional DeviceOrientationEventInit = {});
eventInitDict readonly attribute double ?alpha ;readonly attribute double ?beta ;readonly attribute double ?gamma ;readonly attribute boolean absolute ;static Promise <PermissionState >requestPermission (optional boolean =
absolute false ); };dictionary :
DeviceOrientationEventInit EventInit {double ?=
alpha null ;double ?=
beta null ;double ?=
gamma null ;boolean =
absolute false ; };
ondeviceorientation
속성은
이벤트 핸들러 IDL 속성이며,
ondeviceorientation
이벤트 핸들러입니다.
이벤트 핸들러 이벤트 타입은 deviceorientation
입니다.
alpha
속성은 초기화된 값을 반환해야 합니다. 이 값은 § 3.1 디바이스 방향에서 설명된 Z - X' - Y'' 내적 테이트-브라이언 각에서 Z축을 기준으로 한 회전을
나타냅니다.
beta
속성은 초기화된 값을 반환해야 합니다. 이 값은 § 3.1 디바이스 방향에서 설명된 Z축 회전 후 생성된 X'축을 기준으로 한 회전을 나타냅니다.
gamma
속성은 초기화된 값을 반환해야 합니다. 이 값은 § 3.1 디바이스 방향에서 설명된 Z축과 X'축 회전이 적용된 후 Y''축을 기준으로 한 회전을 나타냅니다.
absolute
속성은 초기화된 값을 반환해야 합니다. 이 값은 상대
방향 또는 절대
방향 데이터가 제공되고 있는지 여부를 나타냅니다.
requestPermission(absolute)
메소드 단계:
-
global을 현재 글로벌 객체로 설정합니다.
-
hasTransientActivation은 this의 관련 글로벌 객체에 일시적 활성화가 있으면 true, 그렇지 않으면 false로 설정합니다.
-
promise를 새로운 promise로 this의 관련 Realm에서 생성합니다.
-
permissions를 « "accelerometer", "gyroscope" »로 설정합니다.
-
absolute가 true이면 append "magnetometer" »를 permissions에 추가합니다.
-
다음 단계들을 병렬로 실행합니다:
-
각 name에 대해 permissions에서:
-
name의 권한 상태가 "
prompt
"이고 hasTransientActivation이 false인 경우:-
글로벌 작업을 큐에 추가하여 디바이스 움직임 및 방향 작업 소스에서 global로 promise를 reject합니다. "
NotAllowedError
"DOMException
으로. -
반환합니다.
-
-
-
permissionState를 "
granted
"로 설정합니다. -
각 name에 대해 permissions에서:
참고: 여러 권한을 한 번에 요청하는 알고리즘은 없습니다. 하지만, 사용자 에이전트는 여러 종류의 미디어에 대한 동시 요청을 하나의 사용자 프롬프트로 묶는 것을 권장합니다.
-
글로벌 작업을 큐에 추가하여 디바이스 움직임 및 방향 작업 소스에서 global로 promise를 resolve합니다. permissionState로.
-
-
promise를 반환합니다.
DOMString
event, Window
window, boolean
absolute를 받아 다음과 같이 한다:
-
orientation을 null로 설정한다.
-
topLevelTraversable을 window의 navigable의 최상위 traversable로 설정한다.
-
virtualSensorType을 "
relative-orientation
" ( absolute가 false일 때 ) 또는 "absolute-orientation
" (그 외)로 설정한다. -
topLevelTraversable의 virtual sensor mapping이 virtualSensorType을 포함한다면:
-
virtualSensor를 topLevelTraversable의 virtual sensor mapping[virtualSensorType]으로 설정한다.
-
virtualSensor의 측정값 제공 가능 플래그가 true라면:
-
orientation을 virtualSensor에 제공된 최신 "
alpha
", "beta
", "gamma
" 키의 측정값으로 설정한다.
-
-
-
그렇지 않은 경우:
-
permissions을 null로 설정한다.
-
absolute가 false이면:
-
permissions을 « "accelerometer", "gyroscope" »로 설정한다.
-
-
그 외:
-
permissions을 « "accelerometer", "gyroscope", "magnetometer" »로 설정한다.
-
-
environment을 window의 관련 설정 객체로 설정한다.
-
다음 단계들을 병렬로 실행한다:
-
각 permission에 대해 permissions에서:
-
state를 현재 권한 상태 획득 결과로 permission과 environment를 이용하여 설정한다.
-
state가 "
granted
"가 아니면, 반환한다.
-
-
글로벌 작업을 큐에 추가하여 디바이스 움직임 및 방향 작업 소스에서 window로 다음 단계를 실행한다:
-
z를 orientation의 Z - X' - Y'' 내적 테이트-브라이언 각에서 Z축 표현값(또는 각 값 제공 불가 시 null)으로 설정한다.
-
z가 null이 아니면, z의 정밀도를 0.1도로 제한한다.
-
x를 orientation의 Z - X' - Y'' 내적 테이트-브라이언 각에서 X'축 표현값(또는 각 값 제공 불가 시 null)으로 설정한다.
-
x가 null이 아니면, x의 정밀도를 0.1도로 제한한다.
-
y를 orientation의 Z - X' - Y'' 내적 테이트-브라이언 각에서 Y''축 표현값(또는 각 값 제공 불가 시 null)으로 설정한다.
-
y가 null이 아니면, y의 정밀도를 0.1도로 제한한다.
-
이벤트 발화를 event 이름으로 window에서,
DeviceOrientationEvent
를 사용하여,alpha
속성은 z으로,beta
속성은 x으로,gamma
속성은 y으로,absolute
속성은 absolute로 초기화하여 발화한다.
-
-
중대한 방향 변화란 이전 값과 비교해 방향 값이 달라졌을 때 deviceorientation 또는 deviceorientationabsolute 이벤트를 발화할 만한 차이가 있는 경우를 의미합니다. 중대한 방향 변화 판단 방법은 구현 정의이며, 최대 1도 변화에 대한 임계값을 권장합니다. 또한 충분히 최신 데이터가 아니라고 판단될 경우에도 이벤트가 발화될 수 있습니다.
참고: 구현체는 § 9 자동화를 고려하여 중대한 방향 변화가 발생했는지 판단해야 하며, 가상 센서 판독값 업데이트가 그 판단에 영향을 줄 수 있습니다.
-
document를 window의 관련 문서로 설정합니다.
-
document의 visibility state가
"visible"
이 아니면, 반환합니다. -
absolute를 false로 설정합니다.
-
features를 « "accelerometer", "gyroscope" »로 설정합니다.
-
구현이 상대 방향을 제공할 수 없거나, 결과로 얻어진 절대 방향 데이터가 더 정확한 경우:
-
absolute를 true로 설정합니다.
-
features에 "magnetometer"를 추가합니다.
-
-
각 feature에 대해 features에서:
-
document가 해당 feature 사용 허가가 없으면, 반환합니다.
-
-
방향 이벤트 발화를 deviceorientation, window, absolute로 실행합니다.
구현이 방향 정보를 영원히 제공할 수 없는 경우, 이벤트는 alpha
,
beta
및 gamma
속성을 null로, absolute
속성을 false로 설정하여 발화되어야 합니다.
6.2. deviceorientationabsolute 이벤트
deviceorientationabsolute
이벤트 및 ondeviceorientationabsolute
이벤트 핸들러 IDL 속성은 위험 요소입니다. 제한적인 구현 경험 때문입니다.
partial interface Window { [SecureContext ]attribute EventHandler ondeviceorientationabsolute ; };
ondeviceorientationabsolute
속성은
이벤트 핸들러 IDL 속성이며,
ondeviceorientationabsolute
이벤트 핸들러입니다.
이벤트 핸들러 이벤트 타입은 deviceorientationabsolute
입니다.
deviceorientationabsolute 이벤트는 deviceorientation 이벤트와 완전히 유사하지만, 반드시 절대 방향 데이터만을 제공해야 한다는 점이 다릅니다.
-
방향 이벤트 발화를 deviceorientationabsolute, window, true로 실행한다.
구현이 절대 방향 정보를 영원히 제공할 수 없는 경우, 이벤트는 alpha
,
beta
및 gamma
속성을 null로, absolute
속성을 true로 설정하여 발화되어야 한다.
6.3. devicemotion 이벤트
6.3.1. DeviceMotionEventAcceleration 인터페이스
[Exposed =Window ,SecureContext ]interface {
DeviceMotionEventAcceleration readonly attribute double ?x ;readonly attribute double ?y ;readonly attribute double ?z ; };
DeviceMotionEventAcceleration
인터페이스는 § 3.2 디바이스 움직임에서 설명된 디바이스의 가속도를 나타냅니다. 다음과 같은 관련 데이터를 가집니다:
- x축 가속도
-
디바이스의 X축을 따라 가속되는 속도, 또는 null. 초기값은 null입니다.
- y축 가속도
-
디바이스의 Y축을 따라 가속되는 속도, 또는 null. 초기값은 null입니다.
- z축 가속도
-
디바이스의 Z축을 따라 가속되는 속도, 또는 null. 초기값은 null입니다.
x
getter 단계는
this의
x축 가속도 값을 반환한다.
y
getter 단계는
this의
y축 가속도 값을 반환한다.
z
getter 단계는
this의
z축 가속도 값을 반환한다.
6.3.2. DeviceMotionEventRotationRate 인터페이스
[Exposed =Window ,SecureContext ]interface {
DeviceMotionEventRotationRate readonly attribute double ?alpha ;readonly attribute double ?beta ;readonly attribute double ?gamma ; };
DeviceMotionEventRotationRate
인터페이스는 회전 속도를 § 3.2 디바이스 움직임에서 설명한 대로 나타냅니다. 다음과 같은 관련 데이터를 가집니다:
- x축 회전 속도
-
디바이스의 X축을 기준으로 한 회전 속도, 또는 null. 초기값은 null입니다.
- y축 회전 속도
-
디바이스의 Y축을 기준으로 한 회전 속도, 또는 null. 초기값은 null입니다.
- z축 회전 속도
-
디바이스의 Z축을 기준으로 한 회전 속도, 또는 null. 초기값은 null입니다.
alpha
getter 단계는
this의 x축 회전 속도 값을 반환한다.
beta
getter 단계는
this의 y축 회전 속도 값을 반환한다.
gamma
getter 단계는
this의 z축 회전 속도 값을 반환한다.
6.3.3. DeviceMotionEvent 인터페이스
partial interface Window { [SecureContext ]attribute EventHandler ondevicemotion ; }; [Exposed =Window ,SecureContext ]interface :
DeviceMotionEvent Event {(
constructor DOMString ,
type optional DeviceMotionEventInit = {});
eventInitDict readonly attribute DeviceMotionEventAcceleration ?acceleration ;readonly attribute DeviceMotionEventAcceleration ?accelerationIncludingGravity ;readonly attribute DeviceMotionEventRotationRate ?rotationRate ;readonly attribute double interval ;static Promise <PermissionState >requestPermission (); };dictionary {
DeviceMotionEventAccelerationInit double ?=
x null ;double ?=
y null ;double ?=
z null ; };dictionary {
DeviceMotionEventRotationRateInit double ?=
alpha null ;double ?=
beta null ;double ?=
gamma null ; };dictionary :
DeviceMotionEventInit EventInit {DeviceMotionEventAccelerationInit ;
acceleration DeviceMotionEventAccelerationInit ;
accelerationIncludingGravity DeviceMotionEventRotationRateInit ;
rotationRate double = 0; };
interval
ondevicemotion
속성은 이벤트 핸들러 IDL 속성이며,
ondevicemotion
이벤트 핸들러입니다. 이벤트 핸들러 이벤트 타입은 devicemotion
입니다.
acceleration
속성은 초기화된 값을 반환해야 합니다. 객체가 생성될 때
이 속성은 null로 초기화되어야 합니다. 디바이스의 선형 가속도를 나타냅니다.
accelerationIncludingGravity
속성은 초기화된 값을 반환해야 합니다. 객체가 생성될 때 이 속성은 null로 초기화되어야 합니다. 디바이스의 중력을 포함한 가속도를 나타냅니다.
rotationRate
속성은 초기화된 값을 반환해야 합니다. 객체가 생성될 때
이 속성은 null로 초기화되어야 합니다. 디바이스의 회전
속도를 나타냅니다.
interval
속성은 초기화된 값을 반환해야 합니다. 이 값은 하드웨어로부터 데이터를
얻어오는 간격을 나타내며 밀리초(ms) 단위로 표현되어야 합니다. 웹 애플리케이션에서 데이터를 쉽게 필터링할 수 있도록 일정하게 유지됩니다.
requestPermission()
메소드 단계는 다음과 같습니다:
-
global을 현재 글로벌 객체로 설정합니다.
-
hasTransientActivation은 this의 관련 글로벌 객체에 일시적 활성화가 있으면 true, 그렇지 않으면 false로 설정합니다.
-
result를 새로운 promise로 this의 관련 Realm에서 생성합니다.
-
다음 단계들을 병렬로 실행합니다:
-
permissions를 « "accelerometer", "gyroscope" »로 설정합니다.
-
각 name에 대해 permissions에서:
-
name의 권한 상태가 "
prompt
"이고 hasTransientActivation이 false인 경우:-
글로벌 작업을 큐에 추가하여 디바이스 움직임 및 방향 작업 소스에서 global로 result를 reject합니다. "
NotAllowedError
"DOMException
으로. -
반환합니다.
-
-
-
permissionState를 "
granted
"로 설정합니다. -
각 name에 대해 permissions에서:
참고: 여러 권한을 한 번에 요청하는 알고리즘은 없습니다. 하지만, 사용자 에이전트는 여러 종류의 미디어에 대한 동시 요청을 하나의 사용자 프롬프트로 묶는 것을 권장합니다.
-
글로벌 작업을 큐에 추가하여 디바이스 움직임 및 방향 작업 소스에서 global로 result를 resolve합니다. permissionState로.
-
-
result를 반환합니다.
-
document를 window의 관련 문서로 설정합니다.
-
document의 visibility state가 "
visible
"이 아니면, 반환합니다. -
각 policy에 대해 « "accelerometer", "gyroscope" »에서:
-
document가 해당 기능 사용 허가가 없으면 정책 제어 기능 policy에 대해 반환한다.
-
-
topLevelTraversable을 window의 navigable의 최상위 traversable로 설정합니다.
-
platformLinearAcceleration을 null로 설정합니다.
-
topLevelTraversable의 virtual sensor mapping이 "linear-acceleration"을 포함하는 경우:
-
virtualSensor를 topLevelTraversable의 virtual sensor mapping["linear-acceleration"]으로 설정합니다.
-
virtualSensor의 측정값 제공 가능 플래그가 true이면, platformLinearAcceleration을 virtualSensor에 제공된 최신 측정값으로 설정합니다.
-
-
그 외에 구현이 선형 가속도를 제공할 수 있으면:
-
platformLinearAcceleration을 디바이스의 선형 가속도 (X, Y, Z축)로 설정합니다.
-
-
acceleration을 null로 설정합니다.
-
platformLinearAcceleration이 null이 아니면:
-
acceleration을 새로운
DeviceMotionEventAcceleration
으로 window의 realm에서 생성합니다. -
acceleration의 x축 가속도를 platformLinearAcceleration의 X축 값(불가하면 null)으로 설정합니다.
-
acceleration의 x축 가속도가 null이 아니면, 정밀도를 0.1 m/s2 이하로 제한합니다.
-
acceleration의 y축 가속도를 platformLinearAcceleration의 Y축 값(불가하면 null)으로 설정합니다.
-
acceleration의 y축 가속도가 null이 아니면, 정밀도를 0.1 m/s2 이하로 제한합니다.
-
acceleration의 z축 가속도를 platformLinearAcceleration의 Z축 값(불가하면 null)으로 설정합니다.
-
acceleration의 z축 가속도가 null이 아니면, 정밀도를 0.1 m/s2 이하로 제한합니다.
-
-
platformAccelerationIncludingGravity를 null로 설정합니다.
-
topLevelTraversable의 virtual sensor mapping이 "accelerometer"를 포함하는 경우:
-
virtualSensor를 topLevelTraversable의 virtual sensor mapping["accelerometer"]로 설정합니다.
-
virtualSensor의 측정값 제공 가능 플래그가 true이면, platformAccelerationIncludingGravity를 virtualSensor에 제공된 최신 측정값으로 설정합니다.
-
-
그 외에 구현이 중력을 포함한 가속도를 제공할 수 있으면:
-
platformAccelerationIncludingGravity를 디바이스의 선형 가속도 (X, Y, Z축)로 설정합니다.
-
-
accelerationIncludingGravity를 null로 설정합니다.
-
platformAccelerationIncludingGravity가 null이 아니면:
-
accelerationIncludingGravity를 새로운
DeviceMotionEventAcceleration
으로 window의 realm에서 생성합니다. -
accelerationIncludingGravity의 x축 가속도를 platformAccelerationIncludingGravity의 X축 값(불가하면 null)으로 설정합니다.
-
accelerationIncludingGravity의 x축 가속도가 null이 아니면, 정밀도를 0.1 m/s2 이하로 제한합니다.
-
accelerationIncludingGravity의 y축 가속도를 platformAccelerationIncludingGravity의 Y축 값(불가하면 null)으로 설정합니다.
-
accelerationIncludingGravity의 y축 가속도가 null이 아니면, 정밀도를 0.1 m/s2 이하로 제한합니다.
-
accelerationIncludingGravity의 z축 가속도를 platformAccelerationIncludingGravity의 Z축 값(불가하면 null)으로 설정합니다.
-
accelerationIncludingGravity의 z축 가속도가 null이 아니면, 정밀도를 0.1 m/s2 이하로 제한합니다.
-
-
platformRotationRate를 null로 설정합니다.
-
topLevelTraversable의 virtual sensor mapping이 "gyroscope"를 포함하는 경우:
-
virtualSensor를 topLevelTraversable의 virtual sensor mapping["gyroscope"]로 설정합니다.
-
virtualSensor의 측정값 제공 가능 플래그가 true이면, platformRotationRate를 virtualSensor에 제공된 최신 측정값으로 설정합니다.
-
-
그 외에 구현이 회전 속도를 제공할 수 있으면:
-
platformRotationRate를 디바이스의 회전 속도 (X, Y, Z축)로 설정합니다.
-
-
rotationRate를 null로 설정합니다.
-
platformRotationRate가 null이 아니면:
-
rotationRate를 새로운
DeviceMotionEventRotationRate
으로 window의 realm에서 생성합니다. -
rotationRate의 x축 회전 속도를 platformRotationRate의 X축 값(불가하면 null)으로 설정합니다.
-
rotationRate의 x축 회전 속도가 null이 아니면, 정밀도를 0.1 deg/s 이하로 제한합니다.
-
rotationRate의 y축 회전 속도를 platformRotationRate의 Y축 값(불가하면 null)으로 설정합니다.
-
rotationRate의 y축 회전 속도가 null이 아니면, 정밀도를 0.1 deg/s 이하로 제한합니다.
-
rotationRate의 z축 회전 속도를 platformRotationRate의 Z축 값(불가하면 null)으로 설정합니다.
-
rotationRate의 z축 회전 속도가 null이 아니면, 정밀도를 0.1 deg/s 이하로 제한합니다.
-
-
environment를 window의 관련 설정 객체로 설정합니다.
-
다음 단계들을 병렬로 실행한다:
-
각 permission에 대해 « "accelerometer", "gyroscope" »:
-
state를 현재 권한 상태 획득 결과로 permission과 environment를 이용해 설정한다.
-
state가 "
granted
"이 아니면, 반환한다.
-
-
글로벌 작업을 큐에 추가하여 디바이스 움직임 및 방향 작업 소스에서 window로 다음 단계들을 실행한다:
-
이벤트 발화를 "devicemotion" 이름으로 window에,
DeviceMotionEvent
를 사용하여,acceleration
속성은 acceleration으로,accelerationIncludingGravity
속성은 accelerationIncludingGravity로,rotationRate
속성은 rotationRate로,interval
속성은 interval로 초기화하여 발화한다.
-
-
구현이 움직임 정보를 영원히 제공할 수 없는 경우, 이벤트는 acceleration
,
accelerationIncludingGravity
및 rotationRate
속성을 null로 설정하여 발화되어야 한다.
7. 보안 및 개인정보 보호 고려사항
이 명세에서 정의하는 API는 가속도계, 자이로스코프, 자기장계 등 하드웨어 센서로부터 정보를 얻는 데 사용할 수 있습니다. 제공되는 데이터는 민감할 수 있으며, 악의적인 웹 페이지로부터 공격의 대상이 될 수 있습니다. 가속도계, 자이로스코프, 자기장계의 보정 값은 특정 센서 하드웨어에 대한 영속적인 정보를 드러낼 수 있습니다 [SENSORID]. 주요 공격 벡터는 다음과 같이 분류할 수 있습니다:
-
사용자 입력 모니터링 [TOUCH]
-
위치 추적 [INDOORPOS]
-
사용자 식별 [FINGERPRINT]
이를 고려하여, 구현체는 웹 페이지에서 센서를 사용하는 경우 시각적 표시를 고려할 수 있습니다. 또한, 이 명세는 requestPermission()
API 호출을 통해
사용자 에이전트가 디바이스 움직임 및/또는 방향 데이터를 제공하기 전에 반드시 사용자의 명시적
동의를 받아야 함을 요구합니다.
더불어, 개인정보 위험과 지문 채취 및 기타 공격 가능성을 최소화하기 위해, 구현체는 다음을 반드시 따라야 합니다:
-
이벤트는 navigable의 활성 문서의 visibility state가 "
visible
"일 때만 발화해야 합니다. -
§ 4 권한을 구현하여 이벤트가 자식 navigable(교차 출처 포함)에 대해 오직 최상위 traversable에 의해 허가된 경우에만 발화해야 합니다.
-
이벤트는 navigable의 활성 window에서 해당 관련 설정 객체가 보안 컨텍스트일 때만 발화해야 합니다.
-
속성 값의 정밀도는 앞서 설명한 대로 제한해야 합니다.
이러한 항목을 구현하면 모바일 디바이스의 배터리 수명에도 긍정적인 영향을 줄 수 있습니다.
최대 샘플링 빈도 제한에 대한 추가 구현 경험을 수집하고 있습니다.
8. 접근성 고려사항
DeviceOrientation 이벤트는 새로운 입력 방식을 제공하여 사용자의 참신한 상호작용을 가능하게 합니다. 더 많은 사람들이 여러분이 만드는 경험에 접근할 수 있도록 하기 위해 다음 사항을 고려해 주세요:
-
대체 입력 수단이 제공되어야 하며, 필요한 제스처를 수행할 수 없는 사람들도 다른 방법으로 상호작용할 수 있어야 합니다. 예를 들어, 운동 능력이 제한된 장애인, 시선 추적이나 머리 움직임 입력을 사용하는 사람 등입니다.
-
게임의 경우, 대체 상호작용 방법으로 게임 컨트롤러, 키보드 또는 마우스 입력을 지원하는 것을 고려하세요.
-
웹 앱의 경우, 버튼, 메뉴 명령, 또는 키보드 단축키 등 기능을 수행할 수 있는 UI를 제공하는 것을 고려하세요.
-
-
사용자가 실수로 입력한 내용을 취소할 수 있어야 하며, 이는 특히 손떨림이 있는 사람들에게 중요합니다.
다음과 같은 두 가지 사용자 요구가 발생할 수 있으며, 이는 보통 사용자 에이전트나 운영체제가 관리하게 됩니다. 하지만, 이러한 사항을 염두에 두는 것은 여러분의 콘텐츠나 앱이 어떻게 사용될 수 있는지 이해하는 데 도움이 됩니다.
-
사용자가 제스처 또는 움직임 기반 입력의 사용을 비활성화할 수 있어야 합니다. 웹 앱은 사용자가 이러한 입력을 제공할 수 있는 적절한 접근 가능한 수단(예: 버튼)을 제공해야 합니다.
-
예시: 흔들어서 실행취소 기능은 일부에게 자연스럽고 유용한 상호작용을 제공하지만, 손떨림이 있는 사람에게는 장애물이 될 수 있습니다. 이는 권한 거부나 브라우저/OS 설정 변경, 웹 앱이 대체 입력 수단을 제공하는 방식으로 관리될 수 있습니다.
-
-
디바이스 방향을 잠글 수 있어야 하며, 대표적인 사용 사례는 시각적이지 않게 터치 디바이스(예: 스마트폰)와 상호작용하는 사람입니다. 이들은 특정 방향에서 화면 요소 위치에 '근육 기억'이 생길 수 있는데, 레이아웃이 바뀌면 탐색 능력이 저하될 수 있습니다. 이 역시 주로 운영체제에서 처리됩니다.
9. 자동화
이 명세는 테스트 작성자에게 도전이 될 수 있는데, 여기서 정의된 이벤트는 물리적 하드웨어의 판독값에 따라 달라지며 쉽게 제어할 수 없기 때문입니다.
이 문제를 해결하기 위해, 본 문서는 [WEBDRIVER2]의 확장 명령과, Generic Sensor API § 9 자동화에서 제시된 인프라를 기반으로 합니다. 별도의 독립적인 인프라와 확장 명령을 새로 개발하는 옵션보다 이를 선택한 이유는 두 명세 간에 상당한 중복이 있기 때문입니다. [GENERIC-SENSOR] 명세의 테스트 역시 유사한 과제를 가지고 있고, 많은 파생 API(예: [GYROSCOPE])도 유사한 정보를 얻고 제공합니다.
이 명세는 Generic Sensor API § 9 자동화 섹션만을 지원하도록 구현을 요구하며, 해당 명세의 인터페이스와 이벤트는 요구하지 않습니다.
9.1. 디바이스 방향 자동화
deviceorientation
이벤트의 자동화 지원은 가상 센서(가속도계, 자이로스코프,
필요 시 자기장계) 기반으로 구축됩니다.
플랫폼에서 사용자 에이전트가 얻는 방향 데이터는 가속도계, 자이로스코프, 필요 시 자기장계에서 가져옵니다. 그러나 움직임 데이터와 달리, 이 저수준 판독값은 § 3.1 디바이스 방향에서 설명한 형태의 오일러 각으로 변환되어야 합니다. 게다가, 플랫폼이 원시 가속도와 회전 데이터를 이미 변환해주는 추가 API를 사용자 에이전트에게 제공할 수도 있습니다.
따라서, 구현체(및 자동화 사용자)가 각기 다른 측정 단위를 사용하는 저수준 가상 센서를 통해 방향 판독값을 제공하도록 요구하는 대신, 이 명세는 상대 및 절대 방향 데이터를 명세에서 사용하는 형식으로 제공하는 추가 가상 센서 타입을 정의합니다.
9.1.1. 방향 데이터 판독값 파싱 알고리즘
Object
parameters에 대해 수행하려면:
-
alpha를 get a property로 parameters에서 "alpha"를 가져온 결과로 설정한다.
-
alpha가
Number
가 아니거나, 값이 NaN, +∞, −∞이면undefined
를 반환한다. -
alpha가 [0, 360) 범위가 아니면
undefined
를 반환한다. -
beta를 get a property로 parameters에서 "beta"를 가져온 결과로 설정한다.
-
beta가
Number
가 아니거나, 값이 NaN, +∞, −∞이면undefined
를 반환한다. -
beta가 [-180, 180) 범위가 아니면
undefined
를 반환한다. -
gamma를 get a property로 parameters에서 "gamma"를 가져온 결과로 설정한다.
-
gamma가
Number
가 아니거나, 값이 NaN, +∞, −∞이면undefined
를 반환한다. -
gamma가 [-90, 90) 범위가 아니면
undefined
를 반환한다. -
«[ "alpha" → alpha, "beta" → beta, "gamma" → gamma ]»로 된 새 ordered map을 반환한다.
참고: 반환 값은 ordered map으로, 센서 판독 개념에 대한 의존성을 피하기 위함입니다. 위 알고리즘 목적상 두 개념은 서로 대체 가능합니다.
9.1.2. "absolute-orientation" 가상 센서 타입
타입별 가상 센서 메타데이터 map 은 다음 항목을 가져야 합니다:
-
- 키
-
"
absolute-orientation
" - 값
-
가상 센서 메타데이터로서, 판독값 파싱 알고리즘이 방향 데이터 판독값 파싱이다.
9.1.3. "relative-orientation" 가상 센서 타입
타입별 가상 센서 메타데이터 map 은 다음 항목을 가져야 합니다:
-
- 키
-
"
relative-orientation
" - 값
-
가상 센서 메타데이터로서, 판독값 파싱 알고리즘이 방향 데이터 판독값 파싱이다.
9.2. 디바이스 움직임 자동화
사용자 에이전트가 플랫폼에서 얻는 움직임 데이터는 가속도계와 자이로스코프에서 가져옵니다. 이 명세는 타입별 가상 센서 메타데이터 항목을 정의하며, 이는 [ACCELEROMETER] 및 [GYROSCOPE] 명세와 공유됩니다.
가속도계 가상 센서는 플랫폼에 중력을 포함한 가속도 데이터를 제공합니다. 선형 가속도 가상 센서는 플랫폼에 선형 가속도 데이터를 제공합니다. 자이로스코프 가상 센서는 플랫폼에 회전 속도 데이터를 제공합니다.
9.2.1. "accelerometer" 가상 센서 타입
타입별 가상 센서 메타데이터 map 은 다음 항목을 가져야 합니다:
- 키
-
"
accelerometer
" - 값
9.2.2. "linear-acceleration" 가상 센서 타입
타입별 가상 센서 메타데이터 map 은 다음 항목을 가져야 합니다:
- 키
-
"
linear-acceleration
" - 값
9.2.3. "gyroscope" 가상 센서 타입
타입별 가상 센서 메타데이터 map 은 다음 항목을 가져야 합니다:
- 키
-
"
gyroscope
" - 값
A 예제
이 섹션은 규범적이지 않습니다.A.1 나침반 방위 계산
이 섹션은 규범적이지 않습니다.
다음 예제는 DeviceOrientation 이벤트 사용자에게 도움을 주기 위한 것입니다.
소개 섹션에서는 DeviceOrientation 이벤트를 사용하여 화면이 수평일 때 나침반 방위를 얻는 예제를 제공했습니다. 이 예제에서는 사용자가 화면을 대략적으로 수직으로 자신 앞에 들고 있을 때 사용자가 바라보는 나침반 방위를 결정하는 방법을 보여줍니다. 증강현실 시스템이 그 활용 예입니다.
좀 더 정확히는, 디바이스 화면에 수직이며 화면 뒤쪽을 향하는 벡터의 수평 성분의 나침반 방위를 구하려는 것입니다.
v가 회전된 디바이스 바디 프레임 xyz에서 이 벡터를 나타낸다면 v는 다음과 같습니다.
z축 회전에 의해 v가 변환되는 것은 다음 회전 행렬로 나타낼 수 있습니다.
x축 회전에 의해 v가 변환되는 것은 다음 회전 행렬로 나타낼 수 있습니다.
y축 회전에 의해 v가 변환되는 것은 다음 회전 행렬로 나타낼 수 있습니다.
R이 지구 프레임 XYZ에서 디바이스의 전체 회전 행렬을 나타낸다면, 초기 바디 프레임이 지구와 정렬되어 있으므로 R은 다음과 같습니다.
v'가 지구 프레임 XYZ에서 v를 나타낸다면, 초기 바디 프레임이 지구와 정렬되어 있으므로 v'는 다음과 같습니다.
나침반 방위 θ는 다음과 같이 주어집니다.
단, β와 γ가 모두 0이 아니어야 합니다.
위 나침반 방위 계산은 아래 자바스크립트 코드로 표현할 수 있으며, 전달된 파라미터가 정의되어 있고 null이 아니며 absolute
값일 때 올바른 나침반 방위를 반환합니다.
var degtorad= Math. PI/ 180 ; // Degree-to-Radian conversion function compassHeading( alpha, beta, gamma) { var _x= beta? beta* degtorad: 0 ; // beta value var _y= gamma? gamma* degtorad: 0 ; // gamma value var _z= alpha? alpha* degtorad: 0 ; // alpha value var cX= Math. cos( _x); var cY= Math. cos( _y); var cZ= Math. cos( _z); var sX= Math. sin( _x); var sY= Math. sin( _y); var sZ= Math. sin( _z); // Calculate Vx and Vy components var Vx= - cZ* sY- sZ* sX* cY; var Vy= - sZ* sY+ cZ* sX* cY; // Calculate compass heading var compassHeading= Math. atan( Vx/ Vy); // Convert compass heading to use whole unit circle if ( Vy< 0 ) { compassHeading+= Math. PI; } else if ( Vx< 0 ) { compassHeading+= 2 * Math. PI; } return compassHeading* ( 180 / Math. PI); // Compass Heading (in degrees) }
일관성 확인을 위해 γ = 0으로 설정하면,
예상대로입니다.
또는 β = 90으로 설정하면,
예상대로입니다.
A.2 대체 디바이스 방향 표현
이 섹션은 규범적이지 않습니다.
Tait-Bryan 각을 이용한 방향 기술은 짐벌락 [GIMBALLOCK]과 같은 단점이 있을 수 있습니다. 의도된 응용에 따라 Device Orientation 값을 다른 회전 표현으로 변환하는 것이 유용할 수 있습니다.
첫 번째 대체 방향 표현은 회전 행렬을 사용합니다. 위 작동 예제에 제공된 구성 요소 회전 행렬을 결합하여 디바이스 바디 프레임의 방향을 하나의 회전 행렬로 나타낼 수 있습니다.
R이 지구 프레임 XYZ에서 디바이스의 회전 행렬을 나타낸다면, 초기 바디 프레임이 지구와 정렬되어 있으므로 R은 다음과 같습니다.
absolute
값일 때 아래와 같이 자바스크립트로 표현할 수 있습니다.
var degtorad= Math. PI/ 180 ; // Degree-to-Radian conversion function getRotationMatrix( alpha, beta, gamma) { var _x= beta? beta* degtorad: 0 ; // beta value var _y= gamma? gamma* degtorad: 0 ; // gamma value var _z= alpha? alpha* degtorad: 0 ; // alpha value var cX= Math. cos( _x); var cY= Math. cos( _y); var cZ= Math. cos( _z); var sX= Math. sin( _x); var sY= Math. sin( _y); var sZ= Math. sin( _z); // // ZXY rotation matrix construction. // var m11= cZ* cY- sZ* sX* sY; var m12= - cX* sZ; var m13= cY* sZ* sX+ cZ* sY; var m21= cY* sZ+ cZ* sX* sY; var m22= cZ* cX; var m23= sZ* sY- cZ* cY* sX; var m31= - cX* sY; var m32= sX; var m33= cX* cY; return [ m11, m12, m13, m21, m22, m23, m31, m32, m33]; };
또 다른 대체 디바이스 방향 데이터 표현은 쿼터니언(Quaternion)입니다. [QUATERNIONS]
q가 지구 프레임 XYZ에서 디바이스의 단위 쿼터니언을 나타낸다면, 초기 바디 프레임이 지구와 정렬되어 있으므로 q는 다음과 같습니다.
absolute
값이며 null이 아니면 아래와 같이 자바스크립트로 표현할 수 있습니다.
var degtorad= Math. PI/ 180 ; // Degree-to-Radian conversion function getQuaternion( alpha, beta, gamma) { var _x= beta? beta* degtorad: 0 ; // beta value var _y= gamma? gamma* degtorad: 0 ; // gamma value var _z= alpha? alpha* degtorad: 0 ; // alpha value var cX= Math. cos( _x/ 2 ); var cY= Math. cos( _y/ 2 ); var cZ= Math. cos( _z/ 2 ); var sX= Math. sin( _x/ 2 ); var sY= Math. sin( _y/ 2 ); var sZ= Math. sin( _z/ 2 ); // // ZXY quaternion construction. // var w= cX* cY* cZ- sX* sY* sZ; var x= sX* cY* cZ- cX* sY* sZ; var y= cX* sY* cZ+ sX* cY* sZ; var z= cX* cY* sZ+ sX* sY* cZ; return [ w, x, y, z]; }
단위 쿼터니언이 올바르게 생성되었는지 Lagrange의 네 제곱수 정리를 이용해 확인할 수 있습니다.
예상대로입니다.
감사의 글
Device Orientation and Motion 명세는 2016년 8월 후보 권고안으로 DeviceOrientation Event Specification이라는 제목으로 처음 공개되었으며, Geolocation Working Group에서 처음 개발되었습니다. 2017년 그룹이 해산된 후 명세는 일시적으로 중단되었다가, 2019년 Devices and Sensors Working Group에서 부활되어 상호운용성, 테스트 자동화, 개인정보 보호, 편집 등에서 상당한 개선이 이루어졌습니다(자세한 내용은 § 10 변경사항 섹션 참조).
2024년 Devices and Sensors Working Group은 Web Applications Working Group과 협력하여 이 문서를 공동 산출물로 만들고 명세 발전을 이어가고 있습니다. 초기 설계 논의는 이 GitHub 저장소가 아닌 Geolocation Working Group의 메일링 리스트 아카이브에서 확인할 수 있습니다.
W3C는 Lars Erik Bolstad, Dean Jackson, Claes Nilsson, George Percivall, Doug Turner, Matt Womer, Chris Dumez의 기여에 감사를 표합니다.
10. 변경사항
이 섹션은 검토에 도움이 되도록 주요 변경점과 편집상의 주요 개선 사항을 요약한 것입니다. 자세한 내역은 커밋 로그에서 확인할 수 있습니다. 2016-08-18 후보 권고안 이후의 변경 사항:
-
Permissions Policy 통합 추가(이전에는 동일 출처의 최상위 프레임 iframe에서만 이벤트 발화하도록 요구됨)
-
권한 요청을 묶어서 처리하는 것에 대한 구현자 안내 추가
-
강력한 기능인 Accelerometer, Gyroscope, Magnetometer 내보내기
-
Permissions API 통합 추가, requestPermission() 사용 필수화 시작
-
편집: API 섹션을 더 규범적으로, 더 많은 정의어(dfn) 포함해 기술
-
편집: Device Motion Model 섹션에서 가속도 설명 순서 변경
-
편집: 디바이스 회전 및 움직임 참조 설명 업데이트
-
편집: 더 정확한 이벤트 처리 용어 사용, 기타 현대화
-
편집: 방향 변경 이벤트 대신 [SCREEN-ORIENTATION] 참조
-
편집: "보안 및 개인정보 보호 고려사항"의 요구사항 재정의
-
사용 사례, 요구사항, 예제 섹션을 비규범적으로 표시
-
oncompassneedscalibration 이벤트 제거
-
"사용자 활성화에 의해 트리거됨" 참조를 "일시적 활성화"로 업데이트
-
이벤트 발화 관련 DOM 문구 정렬
-
DeviceMotionEvent의 가속도 속성 관련 노트 추가
-
좌표계가 CSS 좌표계와 어떻게 다른지에 대한 설명 노트 추가
-
수동 지문 채취 문제 완화를 위해 0.1도, 초당 0.1도, 초당 0.1미터 정밀도보다 더 정밀하게 하지 않도록 요구(관련 이슈)
-
IDL에서 생성자 정의를 Web IDL로 업데이트
-
인터페이스에 명시적으로 [Exposed] 추가
-
IDL 사전(dictionary)에 새로운 기본값 지정 방식 적용
-
deviceorientationabsolute 이벤트와 ondeviceorientationabsolute 이벤트 핸들러 IDL 속성의 제한된 구현 경험 명시
-
DeviceOrientationEvent와 DeviceMotionEvent 모두에 requestPermission() API static operation 추가
-
ondeviceorientation, ondevicemotion, ondeviceorientationabsolute 이벤트 핸들러에 [SecureContext] 추가
-
모든 인터페이스를 보안 컨텍스트로 제한
-
DeviceAcceleration 및 DeviceRotationRate에서 [NoInterfaceObject] 제거
-
보안 및 개인정보 보호 고려사항을 규범적으로 지정
-
ondeviceorientationabsolute 이벤트 핸들러 속성을 IDL 블록에 명시적으로 추가(기존에는 설명에만 있었음)
-
DeviceMotionEventInit 사전의 딕셔너리 멤버에서 '?' 제거
-
[Exposed=Window] 확장 속성 사용