VirtualKeyboard API

W3C 作業草案

この文書についての詳細
このバージョン:
https://www.w3.org/TR/2022/WD-virtual-keyboard-20220505/
最新公開バージョン:
https://www.w3.org/TR/virtual-keyboard/
最新エディタ草案:
https://w3c.github.io/virtual-keyboard/
履歴:
https://www.w3.org/standards/history/virtual-keyboard
コミット履歴
編集者:
(Microsoft Corporation)
前編集者:
(Microsoft Corporation)
フィードバック:
GitHub w3c/virtual-keyboard (プルリクエスト, 新規 issue, オープン issue)
public-editing-tf@w3.org 件名 [virtual-keyboard] … メッセージトピック … (アーカイブ)

概要

VirtualKeyboard APIは、著者にバーチャルキーボード(VK)の表示制御をより柔軟に行う機能と、VKの表示状態が変化した際にウェブページのレイアウトをより適応させる能力を提供します。

この文書のステータス

このセクションでは、本書が公開された時点での文書のステータスについて説明します。現行標準の W3C 公開文書の一覧と、この技術レポートの最新版は W3C 技術レポート一覧 https://www.w3.org/TR/ で確認できます。

本書は Web Editing Working Group により 勧告プロセスに則って 作業草案として公開されました。

作業草案として公開されたことは、W3C およびメンバーによる支持を意味するものではありません。

この文書はドラフトであり、今後更新、置換、廃止される可能性があります。他の文書を引用する場合は、進行中の作業としてのみ参照してください。

本書は W3C 特許ポリシーの下で活動するグループにより作成されています。 W3Cグループ関連公開特許情報リスト を管理しており、そのページには特許の公開方法も記載されています。特許の実質的な請求項が含まれると考えられる特許を知っている場合は、 W3C特許ポリシー第6節に従って情報を開示する必要があります。

この文書は 2021年11月2日 W3C プロセス文書によって管理されています。

1. はじめに

このセクションは規範的ではありません。

バーチャルキーボード(VK)は、ハードウェアキーボードが利用できない状況で入力のために使用される画面上のキーボードです。 ユーザーエージェントは、以下の方法でVKの存在に対応しますが、この情報はウェブ開発者には公開されません: 1. ユーザーエージェントをVKの上に再配置する 2. VKがレイアウトビューポートを覆わないようにレイアウトビューポートのサイズを縮小する 3. ビジュアルビューポートのサイズを縮小し、レイアウトビューポートにパディングを追加してVKの上に移動できるようにする このAPIは、ユーザーエージェントがレイアウトおよびビジュアルビューポートを変更せず、 代わりにVKとレイアウトビューポートの交差情報を提供するという第4の選択肢を提供します。 これにより、著者はJavaScriptやCSS環境変数を使ってウェブページのレイアウトを適応させることができます。

デュアルスクリーンデバイス上のバーチャルキーボードの図 デュアルスクリーンデバイス上のバーチャルキーボードの図

シングルタッチスクリーンデバイス上のバーチャルキーボードの図 シングルタッチスクリーンデバイス上のバーチャルキーボードの図

2. 適合性

非規範的と記載されているセクションだけでなく、この仕様書のすべての作成ガイドライン、図、例、および注記は非規範的です。それ以外の内容はすべて規範的です。

この文書におけるキーワード MUST および MUST NOT は、 BCP 14 [RFC2119] [RFC8174] に記載されている通り、すべて大文字で表記されている場合のみ、その意味として解釈してください。

この仕様は、1つの製品に適用される適合基準を定義しています。それは、この仕様に含まれるインターフェイスを実装する ユーザーエージェントです。

アルゴリズムや特定の手順として記載された適合要件は、最終的な結果が同等である限り、どのような方法で実装しても構いません。 (特に、この仕様で定義されているアルゴリズムは、分かりやすさを重視しており、高速であることを意図していません。)

3. VirtualKeyboard インターフェイス

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;
};

VirtualKeyboard オブジェクトには、以下が関連付けられています:

boundingRect

DOMRect。初期値は全て 0 です。

overlaysContent

boolean型で、初期値は false です。この属性が true に設定されている場合、ユーザーエージェントは MUST NOT 自身の documentviewport または visual viewport をリサイズしてはなりません。

show() メソッド

このメソッドは以下の手順に従うものとします:

  1. windowthis関連グローバルオブジェクト とします。windowWindow オブジェクトであることを確認します。
  2. windowsticky activation を持たない場合は、この手順を中止します。
  3. フォーカスされている要素がフォームコントロール(例えば textarea 要素の値など)でない場合や、編集ホスト (例:contenteditable を使用) でない場合、この手順を中止します。
  4. virtualKeyboardPolicymanual でない場合、または inputMode 属性値が none の場合、この手順を中止します。
  5. システムAPIを呼び出してVKを表示します。
  6. 並行して、以下の手順を実行します:
    1. システムによってバーチャルキーボードが表示されるのを待ちます。
    2. set the virtual keyboard bounding rect をキーボードのOSから報告されたバウンディング矩形と documentviewport 矩形を使って呼び出します。
    3. "geometrychange" イベントthis に発火します。
hide() メソッド

このメソッドは以下の手順に従うものとします:

  1. windowthis関連グローバルオブジェクト とします。windowWindow オブジェクトであることを確認します。
  2. windowsticky activation を持たない場合は、この手順を中止します。
  3. フォーカスされている要素の virtualKeyboardPolicymanual でない場合、または inputMode 属性値が none の場合、この手順を中止します。
  4. システムAPIを呼び出してVKを非表示にします。
  5. 並行して、以下の手順を実行します:
    1. システムによってバーチャルキーボードが非表示になるのを待ちます。
    2. set the virtual keyboard bounding rect をキーボードのOSから報告されたバウンディング矩形(すべて 0 の値)と documentviewport 矩形を使って呼び出します。
    3. "geometrychange" イベントthis に発火します。
注記

プラットフォームのヒューリスティクスによって、VKの show() および hide() に追加の制限が課される場合があります。例:Windowsではポインタタイプがタッチまたはペンである必要があります。

注記

懸念を示す人もいます show() および hide() メソッドが promise ベースでないことに対してですが、VKの表示状態が変化した際に ongeometrychange イベントが発火するため、戻り値は不要であり、ウェブ開発者にとってはこの設計の方が望ましいと考えています。

overlaysContent

overlaysContent の getter 手順は、thisoverlaysContent を返します。

overlaysContent の setter 手順は、thisoverlaysContent に与えられた値を設定します。

boundingRect

この属性は、VKと documentviewport との交差領域をクライアント座標系で報告します。set the virtual keyboard bounding rect を呼び出してください。

set the virtual keyboard bounding rect

set the virtual keyboard bounding rect を、osk(オンスクリーンキーボードの矩形を表すDOMRect)と lvdocumentviewport 矩形を表すDOMRect)を入力として実行するには、次の手順を実行します:
  1. oskshow() または hide()this で実行した結果のオンスクリーンキーボードの矩形とします。
  2. lvdocumentviewport で、show() または hide()this で実行した結果とします。
  3. osklv の座標空間にマッピングします。
  4. boundsDOMRect オブジェクトとします。
  5. boundslvosk の交差領域で更新します。
  6. boundslv の座標空間にマッピングします。
  7. bounds を返します。

boundingRect の getter 手順は、thisboundingRect を返します。

ongeometrychange

このイベントは、VKと documentviewport の交差領域が変更されたとき(例:VKが表示・非表示になった時やブラウザーウィンドウが再配置された時など)に発火されます。

4. ElementContentEditable ミックスインへの拡張

WebIDL partial interface mixin ElementContentEditable {
     [CEReactions] attribute DOMString virtualKeyboardPolicy;
};
Issue 1

input と textarea のハンドリングを追加してください。

virtualKeyboardPolicy は、列挙属性であり、キーワードは 空文字列automanual です。IDL属性は、同名のコンテンツ属性を反映する必要があります。 この属性が contenteditable ホストの要素に指定されている場合、auto は対応する編集可能要素がフォーカスまたはタップされたときに自動的にVKを表示し、manual は編集可能要素のフォーカスやタップによるVKの状態変化を切り離し、VKはそのままになります。
virtualKeyboardPolicy 属性値の設定変更は、現在定義されている動作を打ち消します。ただし、auto から 空文字列 またはその逆への変更は除きます。

Issue 2

フォーカスなどのイベントに対するタイミングを指定してください。

5. バーチャルキーボード表示変更 CSS 環境変数

VirtualKeyboard API は、ウェブ開発者がバーチャルキーボードのサイズを計算し、レイアウトを宣言的に調整できるように 6 つの新しい CSS 環境変数 を提案しています。

注記

これらの CSS env は CSS env 変数仕様 に追加されるべきです。

5.1 キーボードインセット変数

名前
keyboard-inset-top 長さ
keyboard-inset-right 長さ
keyboard-inset-bottom 長さ
keyboard-inset-left 長さ
keyboard-inset-width 長さ
keyboard-inset-height 長さ

キーボードインセットは、ビューポート端からの top, right, bottom, left の差分で矩形を定義する 6 つの環境変数です。デフォルト値は fallback 値が指定されていなければ "0px" となり、boundingRect の値が変更されると更新されます。 幅と高さのインセットは、他のインセット値から計算され、開発者の利便性のために提供されます。

6.

6.1 VK制御APIの利用例

6.2 VK表示による overlaysContent と geometry イベント利用例

下図およびマークアップは、VKが表示された時にアクティブセルを再配置するキャンバスベースのスプレッドシートの例です。geometrychangeイベントがキャンバスの描画リクエストをトリガーします。描画コードはboundingRectプロパティを利用してアクティブセルを適切な位置に描画します。 シングルタッチスクリーンデバイス上のバーチャルキーボードの図

下図は、地図アプリケーションがマップを一つのウィンドウセグメントに、検索結果をもう一つに表示する例です。 Window Segments とメディアクエリの提案を使い、表示された検索ボックスは、バーチャルキーボードがフォルダブルデバイスの左側に現れると、常に見えるよう下マージンを増やします。 シングルタッチスクリーンデバイス上のバーチャルキーボードの図

7. プライバシーとセキュリティに関する考慮事項

VirtualKeyboard APIは、ユーザーのVKレイアウトに関する一部情報を明らかにする可能性があるため、ユーザーエージェントは既存APIを通じてスクリプトがすでに持っている情報以外を追加で公開しないようにしなければなりません。 潜在的なセキュリティおよびプライバシーリスクを軽減するため、ブラウザは以下に記載されたベストプラクティスに従うことが期待されます。

7.1 hide() および show() メソッド

ユーザーエージェントは、overlaysContent の設定を セキュアトップレベル閲覧コンテキスト でのみ許可しなければなりません。

A. IDL索引

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;
};

B. 貢献者

編集者注記

貢献者の追加

C. 参考文献

C.1 規範的参考文献

[dom]
DOM標準. Anne van Kesteren. WHATWG. 現行標準. URL: https://dom.spec.whatwg.org/
[geometry-1]
Geometry Interfaces Module Level 1. Simon Pieters; Chris Harrelson. W3C. 2018年12月4日. W3C勧告候補. URL: https://www.w3.org/TR/geometry-1/
[html]
HTML標準. Anne van Kesteren; Domenic Denicola; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. 現行標準. 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]
Web IDL標準. Edgar Chen; Timothy Gu. WHATWG. 現行標準. URL: https://webidl.spec.whatwg.org/