진동 API

W3C 후보 권고 초안

이 문서에 대한 추가 정보
이 버전:
https://www.w3.org/TR/2026/CRD-vibration-20260521/
최신 공개 버전:
https://www.w3.org/TR/vibration/
최신 편집자 초안:
https://w3c.github.io/vibration/
히스토리:
https://www.w3.org/standards/history/vibration/
커밋 히스토리
테스트 스위트:
https://wpt.live/vibration/
구현 보고서:
https://w3c.github.io/vibration/reports/implementation.html
편집자:
Anssi Kostiainen (Intel)
피드백:
GitHub w3c/vibration (풀 리퀘스트, 새 이슈, 오픈 이슈)
public-device-apis@w3.org 제목 [vibration] … 메시지 주제 … (아카이브)
번역
简体中文
Limited availability:
More info

요약

이 명세서는 호스팅 디바이스의 진동 메커니즘에 접근할 수 있는 API를 정의합니다. 진동은 촉각 피드백의 한 형태입니다.

이 문서의 상태

이 섹션은 문서가 게시된 시점에서의 상태를 설명합니다. 현재의 W3C 게시물 및 이 기술 보고서의 최신 수정 사항은 W3C 표준 및 초안 인덱스에서 확인할 수 있습니다.

이 명세는 Chromium 기반 브라우저에 구현되어 있다. WebKit은 이 명세에 반대하는 입장을 공개했다. Firefox는 버전 129에서 구현을 제거했다. 현재 형태로는 W3C Recommendation으로 진전될 것으로 예상되지 않는다.

이 문서는 Vibration API의 범위와 기능에 대한 그룹의 합의를 나타냅니다. 이 그룹은 보다 고급 사용 사례가 이 간단한 첫 번째 버전을 사용하여 실현할 수 없다는 점을 인식하고 있으며, 이를 향후 수정에서 다룰 예정입니다.

이전 버전의 변경 사항이 제공됩니다.

이 문서는 디바이스 및 센서 작업 그룹에 의해 후보 권장 초안(Candidate Recommendation Draft)으로 발표되었습니다. 이는 권장 트랙을 따른 것입니다.

후보 권장 초안으로 발표된다고 해서 W3C와 그 회원들이 이를 지지하는 것은 아닙니다. 후보 권장 초안은 후속 후보 권장 초안 스냅샷에 포함될 변경 사항을 통합합니다.

이 문서는 초안 문서이며 언제든지 업데이트되거나 교체되거나 폐기될 수 있습니다. 이 문서를 진행 중인 작업으로 인용하는 것 외에는 부적절합니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성되었습니다. W3C는 그룹의 결과물과 관련하여 공개된 특허 목록을 유지합니다. 해당 페이지에는 특허를 공개하는 방법도 포함되어 있습니다. 실제로 핵심 청구 항목이 포함되어 있다고 믿는 특허에 대한 정보를 알고 있는 개인은 W3C 특허 정책 제6조에 따라 정보를 공개해야 합니다.

이 문서는 2025년 8월 18일 W3C 프로세스 문서에 의해 규제됩니다.

1. 소개

이 섹션은 비규범적입니다.

이 API는 단순한 촉각 피드백만을 필요로 하는 사용 사례를 위해 특별히 설계되었습니다. 더 세밀한 제어가 필요한 사용 사례는 이 명세의 범위에 포함되지 않습니다. 이 API는 일반적인 알림 메커니즘으로 사용하기 위한 것이 아닙니다. 이러한 사용 사례는 Notifications API [NOTIFICATIONS] 명세를 통해 처리할 수 있습니다. 또한 진동이 활성화되어 있는지 여부를 확인하는 것은 이 명세의 범위에 포함되지 않습니다.

2. 적합성

비규범적으로 표시된 섹션뿐만 아니라, 이 명세서의 모든 작성 지침, 도표, 예시, 주석은 비규범적입니다. 그 외의 모든 내용은 규범적입니다.

이 문서에서 키워드 MAY, MUST, SHOULDBCP 14 [RFC2119] [RFC8174] 문서에서 이 단어들이 전부 대문자로 표시될 때, 그리고 그때에만 이 키워드들이 설명한 대로 해석됩니다.

이 명세는 하나의 제품에 적용되는 적합성 기준을 정의합니다: 이 명세에 포함된 인터페이스를 구현하는 user agent입니다.

이 명세에서 정의된 API를 ECMAScript로 구현하는 경우, Web IDL 명세 [WEBIDL-1]에 정의된 ECMAScript 바인딩에 따라 구현해야 합니다. 이 명세서는 해당 명세와 용어를 사용합니다.

3. 진동 인터페이스

WebIDLtypedef (unsigned long or sequence<unsigned long>) VibratePattern;

partial interface Navigator {
    boolean vibrate (VibratePattern pattern);
};

vibrate() 메서드는 진동 패턴 처리 알고리즘을 실행합니다. 진동 패턴VibratePattern 객체로 표현됩니다.

진동 패턴 처리의 규칙은 다음 알고리즘에 따릅니다:

  1. patternvibrate() 메서드의 첫 번째 인자로 지정합니다.
  2. valid patternpattern검증 및 정규화에 전달한 결과로 지정합니다.
  3. documentvisibility statevisible이 아니면 false를 반환하고 종료합니다.
    참고
    운영체제의 기능과 긴밀히 통합된 신뢰할 수 있는(특권을 가진) 애플리케이션은 해당 애플리케이션이 전혀 보이지 않는 경우에도 디바이스를 진동시킬 수 있으며, 이전 단계를 무시할 수 있습니다.
  4. 진동 수행this관련 글로벌 객체valid pattern과 함께 실행합니다.

검증 및 정규화진동 패턴 pattern에 대해 수행하려면, 다음 단계로 진행합니다:

  1. pattern이 리스트라면 다음 단계로 진행합니다. 아니라면 아래 하위 단계를 실행합니다:
    1. list를 빈 리스트로 만들고 patternlist에 추가합니다.
    2. patternlist로 설정합니다.
  2. max length를 10으로 지정합니다.
  3. pattern의 길이가 max length보다 크면, pattern을 잘라내어 처음 max length 항목만 남깁니다.
    참고
    pattern의 길이가 짝수이고 0이 아니라면, 패턴의 마지막 항목은 효과가 없으므로 구현체는 이 단계에서 이를 pattern에서 제거할 수 있습니다.
  4. max duration을 10000으로 지정합니다.
  5. pattern의 각 항목 값이 max duration보다 크면, 해당 항목의 값을 max duration으로 설정합니다.
  6. pattern을 반환합니다.

진동 수행global object global진동 패턴 pattern을 사용하여 수행하려면, 다음 단계로 진행합니다:

  1. globalsticky activation을 갖지 않으면, false를 반환하고 종료합니다.
  2. 구현체는 MAY false를 반환하고 종료할 수 있습니다.
    참고
    예를 들어, 구현체는 진동 하드웨어가 없거나, 사용자가 특정 origin의 페이지에서 디바이스 진동을 비활성화하도록 설정했거나, 구현체가 페이지가 진동시킬 수 있는 총 시간을 제한하고 이를 초과하는 요청을 거부할 수 있기 때문에 알고리즘을 중단할 수 있습니다.
  3. 다른 진동 수행 알고리즘 인스턴스가 이미 실행 중이면, 아래 하위 단계를 실행합니다:
    1. 다른 진동 수행 알고리즘 인스턴스가 있다면 중단합니다.
    2. pattern이 빈 리스트이거나, 값이 0인 단일 항목이거나, 디바이스가 진동할 수 없으면 true를 반환하고 종료합니다.
  4. true를 반환하고, 이후 단계는 비동기로 계속 실행합니다.
  5. pattern의 각 time에 대해 아래 하위 단계를 실행합니다:
    1. time의 인덱스가 짝수(첫 항목은 0)면, 디바이스를 time 밀리초 동안 진동시킵니다.
    2. 그 외에는 time 밀리초 동안 대기합니다.

user agentvisibility statetop-level browsing contextDocument에서 변경되었다고 판단하면, 이미 실행 중인 진동 패턴 처리 알고리즘을 중단해야 합니다(MUST).

4. 보안 및 개인정보 보호 고려사항

Vibration API 자체는 데이터를 생성하지 않으므로 웹에서 소비할 수 있는 데이터를 직접 제공하지 않습니다. 하지만 다른 API의 이벤트 소스로 활용될 수 있는 것이 알려져 있습니다. 특히, 가속도계나 자이로스코프와 같은 특정 센서는 제조 과정에서 미세한 불완전성을 가질 수 있습니다. 이로 인해 진동 API를 통해 생성된 진동 자극을 이용해 이러한 센서가 지문(surface)이 되어 정보가 악용될 수 있습니다. 이런 관점에서 Vibration API는 다른 메커니즘과 결합될 때 간접적으로 개인정보 위험을 제공합니다. 이는 예상치 못한 개인정보 위험(디바이스 간 추적, 통신 등)을 유발할 수 있습니다. 또한 진동 중인 디바이스는 외부 관찰자에게 물리적으로 식별될 수 있고, 사용자의 추적이 가능해질 수 있습니다.

이러한 이유로 user agent는 API가 사용될 때 사용자에게 알리고, API를 원천적으로(혹은 origin별로) 비활성화(실질적으로 아무 동작도 하지 않도록)할 수 있는 메커니즘을 제공할 수 있습니다(MAY).

user agent는 일정 기간(예: 1분 또는 1시간 등) 내에 진동 요청 횟수를 제한함으로써 과도한 사용을 방지하기 위해 글로벌 레이트 리미팅을 적용해야 합니다(SHOULD).

5. 예시

이 섹션은 비규범적입니다.

아래 예제에서는 디바이스가 1000밀리초(ms) 동안 진동합니다:

// 1000ms 동안 진동
navigator.vibrate(1000);

// 또는
navigator.vibrate([1000]);

다음 예제에서는 패턴에 따라 디바이스가 50ms 진동, 100ms 정지, 150ms 진동합니다:

navigator.vibrate([50, 100, 150]);

다음 예제는 기존의 모든 진동을 취소합니다:

// 기존 진동 취소
navigator.vibrate(0);

// 또는
navigator.vibrate([]);

A. 감사의 말씀

그룹은 Justin Lebar, Mounir Lamouri, Jonas Sicking, 그리고 Mozilla WebAPI 팀의 기여와 WebVibrator 프로토타입을 초기 입력으로 제공해주신 점에 깊이 감사드립니다. Anne van Kesteren께서는 명세가 다른 문맥에서도 재사용될 수 있도록 제안해주셨고, Lukasz Olejnik께서는 개인정보 보호 고려사항에 대해 도움을 주셨습니다. 마지막으로 Zhiqiang Zhang께서는 간체 중국어 번역에 감사드립니다.

B. 변경 사항

W3C 권고안 2016년 10월 18일 이후 변경 사항:

문서 해석에 기능적으로 영향을 미치지 않는 기타 변경 사항:

C. IDL 색인

WebIDLtypedef (unsigned long or sequence<unsigned long>) VibratePattern;

partial interface Navigator {
    boolean vibrate (VibratePattern pattern);
};

D. 참고문헌

D.1 표준 참고 문헌

[dom]
DOM 표준. Anne van Kesteren. WHATWG. Living Standard. URL: https://dom.spec.whatwg.org/
[html]
HTML 표준. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[RFC2119]
RFC에서 요구 사항 수준을 나타내는 데 사용하는 핵심 단어. S. Bradner. IETF. 1997년 3월. 현재 모범 사례. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
RFC 2119의 대소문자 혼동에 관한 명확성. B. Leiba. IETF. 2017년 5월. 현재 모범 사례. URL: https://www.rfc-editor.org/rfc/rfc8174
[WEBIDL-1]
Web IDL 표준. Edgar Chen; Timothy Gu. WHATWG. Living Standard. URL: https://webidl.spec.whatwg.org/

D.2 안내 참고 문헌

[NOTIFICATIONS]
알림 API 표준. Anne van Kesteren. WHATWG. Living Standard. URL: https://notifications.spec.whatwg.org/