Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
VirtualKeyboard
API는 작성자에게 가상 키보드(VK)의 표시 여부에 대한 더
많은 제어 권한과 VK 표시 여부가 변경될 때 웹 페이지 레이아웃을 더욱 적절하게 조정할 수 있는 기능을 제공합니다.
이 섹션은 본 문서가 발행된 시점의 상태를 설명합니다. 현재 W3C 출판물 목록과 이 기술 보고서의 최신 개정판은 W3C 기술 보고서 색인 https://www.w3.org/TR/에서 확인할 수 있습니다.
이 문서는 웹 편집 워킹 그룹에서 권고 절차를 사용하여 작업 초안으로 발행되었습니다.
작업 초안으로 공개된 문서는 W3C 및 회원사의 승인임을 의미하지 않습니다.
이 문서는 초안 문서이며 언제든지 업데이트, 교체 또는 폐기될 수 있습니다. 진행 중인 작업 외에는 인용에 적합하지 않습니다.
본 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성되었습니다. W3C는 그룹 산출물과 관련된 공개 특허 목록을 관리합니다. 해당 페이지에는 특허 공개 방법도 안내되어 있습니다. 특정 특허에 실제로 해당하는 Essential Claim(s)가 있다고 판단되는 경우 W3C 특허 정책 6절에 따라 정보를 공개해야 합니다.
이 문서는 2021년 11월 2일 W3C 프로세스 문서에 따라 관리됩니다.
이 섹션은 비규범적입니다.
가상 키보드(VK)는 하드웨어 키보드가 없을 때 입력을 위해 사용하는 화면상의 키보드입니다. 사용자 에이전트는 VK의 존재에 반응하지만, 이 정보는 웹 개발자에게 노출되지 않으며 다음과 같이 처리됩니다: 1. 사용자 에이전트를 VK 위로 재배치 2. VK가 가리지 않도록 레이아웃 뷰포트의 크기 축소 3. 시각적 뷰포트의 크기를 줄이고 레이아웃 뷰포트를 패딩하여 VK 위로 이동할 수 있도록 함 이 API는 사용자 에이전트가 레이아웃 및 시각적 뷰포트를 변경하지 않고 대신 VK와 레이아웃 뷰포트의 교차 정보를 제공하여 작성자가 JavaScript 또는 CSS 환경 변수를 이용해 웹 페이지의 레이아웃을 조정할 수 있는 네 번째 옵션을 제공합니다.
듀얼 스크린 장치에서 가상 키보드가 표시된 그림
단일 터치 스크린 장치에서 가상 키보드가 표시된 그림
비규범적으로 표시된 섹션뿐만 아니라, 이 명세서에 있는 모든 작성 지침, 도표, 예시, 참고 사항은 비규범적입니다. 그 외의 모든 내용은 규범적입니다.
이 문서에서 MUST 및 MUST NOT 키워드는 BCP 14 [RFC2119] [RFC8174] 에서 설명된 대로, 그리고 여기와 같이 모두 대문자로 표시된 경우에만 해석됩니다.
이 명세서는 하나의 제품에 적용되는 적합성 기준을 정의합니다: 본 명세서에 포함된 인터페이스를 구현하는 user agent입니다.
알고리즘 또는 특정 단계로 표현된 적합성 요구사항은 결과가 동등하다면 어떤 방식으로든 구현할 수 있습니다. (특히, 이 명세서에서 정의된 알고리즘은 이해하기 쉽도록 작성된 것이며, 성능을 위한 것이 아닙니다.)
WebIDL
[Exposed=Window, SecureContext]
interface VirtualKeyboard
: EventTarget {
undefined show
();
undefined hide
();
readonly attribute DOMRect boundingRect
;
attribute boolean overlaysContent
;
attribute EventHandler ongeometrychange
;
};
VirtualKeyboard
객체에는 다음이 연결되어 있습니다:
boundingRect
DOMRect
, 처음에는 값이 0입니다.
overlaysContent
boolean, 처음에는 false
입니다. 이 속성이 true
로 설정되면 사용자 에이전트는 MUST
NOT 자신의 document의 viewport 또는 visual viewport를 리사이즈해서는 안 됩니다.
show()
메서드
이 메서드는 다음 단계를 따라야 합니다:
Window
객체임을 보장합니다.
virtualKeyboardPolicy
값이 manual
이 아니거나 inputMode
속성 값이 none이면
이 단계를 중단합니다.
set the virtual keyboard bounding rect
를 키보드의 OS 보고 bounding rectangle과 document의 viewport rectangle로 호출합니다.
hide()
메서드
이 메서드는 다음 단계를 따라야 합니다:
Window
객체임을 보장합니다.
virtualKeyboardPolicy
값이 manual
이 아니거나 inputMode
속성 값이 none이면
이 단계를 중단합니다.
set the virtual keyboard bounding rect
를 키보드의 OS 보고 bounding rectangle(모든 값이 0), document의 viewport rectangle로 호출합니다.
플랫폼 휴리스틱은 VK show
()
및 hide
()
에 추가적인 제한을 둘 수
있습니다. 예를 들어, Windows에서는 포인터 타입이 MUST 터치 또는 펜이어야 합니다.
일부 사용자는 우려를 표명했으며
show
()
및 hide
()
메서드가 프라미스 기반이
아니라고 지적했습니다. 하지만 VK 표시 여부가 변경될 때 ongeometrychange
이벤트가
발생하므로 반환값이 필요하지 않아 웹 개발자가 더 쉽게 사용할 수 있다고 봅니다.
overlaysContent
getter 단계는
this의 overlaysContent
를 반환하는 것입니다.
overlaysContent
setter 단계는
this의 overlaysContent
를 주어진 값으로
설정하는 것입니다.
이 속성은 VK와 document의 viewport가 클라이언트 좌표에서 교차하는 부분을 보고합니다. set the virtual keyboard bounding rect
를
호출합니다.
set the virtual keyboard bounding rect
set the virtual keyboard bounding rect를 설정하려면 osk(화면 키보드 사각형을 나타내는 DOMRect)와 lv(document의 viewport 사각형을 나타내는 DOMRect)를 입력값으로 받아 다음과 같이 실행합니다:show
()
또는 hide
()
의 결과로 얻은 화면 키보드
사각형으로 설정합니다.
show
()
또는 hide
()
의 결과로 얻은 값으로
설정합니다.
DOMRect
객체로 만듭니다.
boundingRect
getter 단계는 this의 boundingRect
를 반환하는 것입니다.
ongeometrychange
VK와 document의 viewport의 교차가 변경될 때(예: VK가 표시/숨겨지거나 브라우저 창이 재배치되는 경우) 이벤트가 디스패치됩니다.
WebIDL partial interface mixin ElementContentEditable
{
[CEReactions] attribute DOMString virtualKeyboardPolicy
;
};
input과 textarea 처리를 추가하세요.
virtualKeyboardPolicy
는 열거형
속성이며, 키워드는 빈 문자열
, auto
, manual
입니다. IDL 속성은 동일 이름의
콘텐츠 속성을 반영해야 합니다.
contenteditable 호스트인 요소에 지정되면, auto
는 해당 편집 가능한 요소가 포커스되거나 탭될 때 VK를 자동으로 표시하고,
manual
은 편집 가능한 요소의 포커스 및 탭 동작을 VK의 상태 변화와 분리하여 VK가 현재 상태를 유지하도록 합니다.
virtualKeyboardPolicy
속성 값의 변경은 auto
에서 빈 문자열
또는 그 반대로 변경하는 경우를 제외하면 현재 정의된 동작을 무효화합니다.
포커스와 같은 이벤트와의 타이밍을 명시하세요.
VirtualKeyboard
API는 웹 개발자가 가상 키보드의 크기를 계산하고 레이아웃을
선언적으로 조정할 수 있도록 여섯 개의 새로운 CSS 환경 변수를 제안합니다.
이러한 CSS env는 CSS env 변수 명세에 추가되어야 합니다.
이름 | 값 |
---|---|
keyboard-inset-top | 길이 |
keyboard-inset-right | 길이 |
keyboard-inset-bottom | 길이 |
keyboard-inset-left | 길이 |
keyboard-inset-width | 길이 |
keyboard-inset-height | 길이 |
키보드 인셋은 뷰포트의 가장자리에서 위, 오른쪽, 아래, 왼쪽 인셋으로 사각형을 정의하는 여섯 개의 환경 변수입니다. 기본값은 폴백 값이 지정되지 않으면 "0px"이고, boundingRect
값이 변경되면 갱신됩니다.
width와 height 인셋은 개발자 편의를 위해 나머지 인셋에서 계산됩니다.
아래 그림과 마크업은 VK가 표시될 때 활성 셀을 재배치하는 캔버스 기반 스프레드시트를 보여줍니다. geometrychange
이벤트가 캔버스의 페인트 요청을
트리거하며, 페인팅 코드는 boundingRect
속성을 활용해 활성 셀을 올바른 위치에 렌더링할 수 있습니다.
hide
()
및 show
()
메서드를 보안 컨텍스트에서만 호출하도록 허용해야 합니다.
show
()
메서드가 sticky
activation이 있을 때만 호출되도록 허용해야 합니다.
boundingRect
, overlaysContent
및 ongeometrychange
속성
overlaysContent
가
보안 최상위 브라우징
컨텍스트에서만 설정되도록 허용해야 합니다.
WebIDLpartial interface Navigator {
[SecureContext, SameObject] readonly attribute VirtualKeyboard
virtualKeyboard
;
};
[Exposed=Window, SecureContext]
interface VirtualKeyboard
: EventTarget {
undefined show
();
undefined hide
();
readonly attribute DOMRect boundingRect
;
attribute boolean overlaysContent
;
attribute EventHandler ongeometrychange
;
};
partial interface mixin ElementContentEditable
{
[CEReactions] attribute DOMString virtualKeyboardPolicy
;
};
기여자 추가
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: