Copyright © 2023 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
この仕様は、テキストや関連する入力のイベントに追加を定義し、テキストエディターアプリケーションやテキスト入力・テキスト整形を扱う他のアプリケーションにおいて、ブラウザーのデフォルト動作を監視・操作できるようにします。この仕様は、UI イベント仕様 [UI-EVENTS] を基盤としています。
このセクションは、公開時点でのこの文書のステータスについて説明しています。現行の W3C 公開文書と本技術レポートの最新改訂版は、W3C 技術報告一覧(https://www.w3.org/TR/)で確認できます。
Input Events Level 1 は Input Events の最初のバージョンです [INPUT-EVENTS]。
Input Events 仕様の テストスイート と 実装レポート は、現在も作業中です。
この文書は Web Editing Working Group によって 勧告トラックを使用し、廃止ドラフトとして公開されました。
廃止ドラフトとして公開されたことは、W3C およびそのメンバーによる承認を意味するものではありません。
廃止ドラフトとして公開された文書は、今後の発展や保守を意図していません。廃止された作業以外の目的でこの文書を引用するのは不適切です。
この文書は W3C 特許ポリシーに基づき運用されるグループによって作成されました。 W3C は 関連する特許開示の公開リスト を維持しています。そのページには特許開示の方法も記載されています。特許に関する実際の知識があり、その特許に 必須クレーム が含まれていると考えられる場合は、 W3C 特許ポリシー第6節に従って情報を開示しなければなりません。
この文書は 2023年6月12日 W3Cプロセス文書 に従って管理されています。
本文書では編集に関連する追加事項について、UI イベント仕様[UI-EVENTS]で記述されている input および beforeinput の2つのイベントに関する説明を行います。 これらのイベントの目的は、著者が編集前後のデフォルト編集動作を把握したり、上書きできるようにすることです。
DataTransfer
この定義は規範的ではありません。
キルバッファは、クリップボードとは別のリッチテキストコンテンツ用のインメモリストアであり、 特定の削除コマンドで削除されたコンテンツを一時的に保存できます。 ユーザーは「ヤンク」の意図を示すことで、 キルバッファ内の内容で現在の選択範囲を置換できます。このセクションは規範的ではありません。
ウェブベースのテキストエディターを作成するには、ブラウザーコードに加え、かなりの量の JavaScript が必要です。その理由として、以下が挙げられます。
この仕様は、beforeinput イベントを介してウェブ開発者がテキスト編集に関するすべてのユーザー入力処理をブラウザー上書きできるシンプルな方法と、 input イベントでユーザー入力によってブラウザーが DOM に加えた変更を監視できる方法の提供を目指します。
このセクションは規範的ではありません。
Input イベントは、ユーザーがマークアップの編集を試みる前(beforeinput イベント)および後(input イベント)に送信されます。これには、コンテンツの挿入・削除や書式変更が含まれます。
Input イベントは、編集ホストとして機能する要素、つまり contenteditable 属性が設定された要素、textarea
要素、そして
input
テキスト入力を許可する要素上で発行
[UI-EVENTS]されます。
WebIDLpartial interface InputEvent
{
readonly attribute DataTransfer
? dataTransfer
;
sequence<StaticRange> getTargetRanges
();
};
partial dictionary InputEventInit
{
DataTransfer
? dataTransfer
= null;
sequence<StaticRange> targetRanges
= [];
};
InputEvent
および
InputEventInit
オブジェクトは[UI-EVENTS]で定義されています。
inputType、dataTransfer
、
targetRanges
の属性は、
InputEventInit
で
InputEvent
オブジェクトの対応する属性を初期化します。
このセクションは規範的ではありません。
次の表は、data
および
dataTransfer
属性が値を持つ場合と null になる場合、
また getTargetRanges()
メソッドが空または非空の配列を返すタイミングについて、inputType ごとにまとめたものです。
編集ホスト | inputType | data | dataTransfer | getTargetRanges() |
---|---|---|---|---|
Contenteditable |
"insertText" ,
"insertCompositionText" ,
"formatSetBlockTextDirection" ,
"formatSetInlineTextDirection" ,
"formatBackColor" ,
"formatFontColor" ,
"formatFontName" , "insertLink"
|
Yes | null | 非空配列 |
Contenteditable |
"insertFromPaste" ,
"insertFromPasteAsQuotation" ,
"insertFromDrop" ,
"insertReplacementText" ,
"insertFromYank"
|
null | Yes | 非空配列 |
<textarea> , <input
type="text">
|
"insertText" ,
"insertCompositionText" ,
"insertFromPaste" ,
"insertFromPasteAsQuotation" ,
"insertFromDrop" ,
"insertReplacementText" ,
"insertFromYank" ,
"formatSetBlockTextDirection" ,
"formatSetInlineTextDirection" ,
"formatBackColor" ,
"formatFontColor" ,
"formatFontName" , "insertLink"
|
Yes | null | 空配列 |
All |
"historyUndo" , "historyRedo"
|
null | null | 空配列 |
Contenteditable | その他すべて | null | null | 非空配列 |
<textarea> , <input
type="text">
|
その他すべて | null | null | 空配列 |
beforeinput イベントがキャンセル可能かどうかは inputType に依存します。
どの inputType が選択されるかは、ユーザーの 意図の表明、編集が IME の構成中かどうか、および選択範囲の状態によって決まります。
本仕様では、inputType 値を次の表の inputType 列に示す値として定義します。
inputType | ユーザーの意図の表明 | IME構成の一部 | beforeinput キャンセル可能 | 選択範囲の状態 |
---|---|---|---|---|
"insertText"
|
入力されたプレーンテキストの挿入 | いいえ | 未定義 | 任意 |
"insertReplacementText"
|
スペルチェッカーや自動修正などによる既存テキストの置換 | いいえ | 未定義 | 任意 |
"insertLineBreak"
|
改行挿入 | いいえ | 未定義 | 任意 |
"insertParagraph"
|
段落区切りの挿入 | いいえ | 未定義 | 任意 |
"insertOrderedList"
|
番号付きリストの挿入 | いいえ | はい | 任意 |
"insertUnorderedList"
|
箇条書きリストの挿入 | いいえ | はい | 任意 |
"insertHorizontalRule"
|
水平線の挿入 | いいえ | はい | 任意 |
"insertFromYank"
|
現在の選択範囲をキルバッファに保存された内容で置換 | いいえ | はい | 任意 |
"insertFromDrop"
|
ドロップ操作による内容の挿入 | いいえ | はい | 任意 |
"insertFromPaste"
|
貼り付け | いいえ | はい | 任意 |
"insertFromPasteAsQuotation"
|
引用として内容を貼り付け | いいえ | はい | 任意 |
"insertTranspose"
|
直前に入力された文字2つを入れ替える | いいえ | はい | 任意 |
"insertCompositionText"
|
現在の構成文字列を置換 | はい | いいえ | 任意 |
"insertLink"
|
リンク挿入 | いいえ | はい | 任意 |
"deleteWordBackward"
|
キャレット位置の直前の単語を削除 | いいえ | 未定義 | 折り畳み |
"deleteWordForward"
|
キャレット位置の直後の単語を削除 | いいえ | 未定義 | 折り畳み |
"deleteSoftLineBackward"
|
キャレットから視覚的な改行位置まで直前を削除 | いいえ | 未定義 | 折り畳み |
"deleteSoftLineForward"
|
キャレットから視覚的な改行位置まで直後を削除 | いいえ | 未定義 | 折り畳み |
"deleteEntireSoftLine"
|
キャレット直前の視覚的改行位置からキャレット直後の視覚的改行位置まで削除 | いいえ | 未定義 | 折り畳み |
"deleteHardLineBackward"
|
キャレットから直前のブロック要素または
br
要素まで削除
|
いいえ | 未定義 | 折り畳み |
"deleteHardLineForward"
|
キャレットから直後のブロック要素または
br
要素まで削除
|
いいえ | 未定義 | 折り畳み |
"deleteByDrag"
|
ドラッグ操作による内容の削除 | いいえ | はい | 任意 |
"deleteByCut"
|
カット操作による選択範囲の削除 | いいえ | はい | 任意 |
"deleteContent"
|
削除の方向を指定せず、他の inputType に該当しない選択範囲の削除 | いいえ | 未定義 | 折り畳みでない |
"deleteContentBackward"
|
キャレット直前の内容の削除(他の inputType に該当しない場合)、または削除後に選択範囲が先頭に折り畳まれる場合の選択範囲の削除 | いいえ | 未定義 | 任意 |
"deleteContentForward"
|
キャレット直後の内容の削除(他の inputType に該当しない場合)、または削除後に選択範囲が末尾に折り畳まれる場合の選択範囲の削除 | いいえ | 未定義 | 任意 |
"historyUndo"
|
最後の編集操作の取り消し | いいえ | はい | 任意 |
"historyRedo"
|
直前の取り消し操作のやり直し | いいえ | はい | 任意 |
"formatBold"
|
太字テキストの開始 | いいえ | はい | 任意 |
"formatItalic"
|
斜体テキストの開始 | いいえ | はい | 任意 |
"formatUnderline"
|
下線テキストの開始 | いいえ | はい | 任意 |
"formatStrikeThrough"
|
取り消し線テキストの開始 | いいえ | はい | 任意 |
"formatSuperscript"
|
上付きテキストの開始 | いいえ | はい | 任意 |
"formatSubscript"
|
下付きテキストの開始 | いいえ | はい | 任意 |
"formatJustifyFull"
|
選択範囲の両端揃え | いいえ | はい | 任意 |
"formatJustifyCenter"
|
選択範囲の中央揃え | いいえ | はい | 任意 |
"formatJustifyRight"
|
選択範囲の右揃え | いいえ | はい | 任意 |
"formatJustifyLeft"
|
選択範囲の左揃え | いいえ | はい | 任意 |
"formatIndent"
|
選択範囲のインデント | いいえ | はい | 任意 |
"formatOutdent"
|
選択範囲のインデント解除 | いいえ | はい | 任意 |
"formatRemove"
|
選択範囲の書式設定をすべて削除 | いいえ | はい | 任意 |
"formatSetBlockTextDirection"
|
テキストブロックの方向を設定 | いいえ | はい | 任意 |
"formatSetInlineTextDirection"
|
テキストのインライン方向を設定 | いいえ | はい | 任意 |
"formatBackColor"
|
背景色の変更 | いいえ | はい | 任意 |
"formatFontColor"
|
フォント色の変更 | いいえ | はい | 任意 |
"formatFontName"
|
フォントファミリーの変更 | いいえ | はい | 任意 |
"deleteContentBackward"
はユーザーがテキストノード内のテキスト削除を要求した場合や、キャレットがテキストノードの先頭にあり、より複雑な要素の削除や段落結合の意図を示した場合にも使用されます。
"deleteContentForward"
はユーザーがテキストノード内のテキスト削除を要求した場合や、キャレットがテキストノードの末尾にあり、より複雑な要素の削除や段落結合の意図を示した場合にも使用されます。
この注は規範的ではありません。
一部のスクリプトやプラットフォームでは、折り畳み選択かつテキストノード内の後方削除時に、全書記素クラスタではなくコードポイント[INFRA]のみ削除されます。getTargetRanges()
メソッドで、テキストノード内削除時にブラウザーがデフォルトで削除するコードポイント数を調べることができます。
この注は規範的ではありません。
一部のスクリプトやプラットフォームでは、折り畳み選択かつテキストノード内の前方削除時に、単一のコードポイント[INFRA]ではなく、全書記素クラスタ[UAX29]が削除されます。getTargetRanges()
メソッドで、テキストノード内削除時にブラウザーがデフォルトで削除するコードポイント数を調べることができます。
data
は、文書に追加されるプレーンテキストデータに関する情報を保持します。
inputType | 編集ホスト | data |
---|---|---|
"insertText" または
"insertCompositionText"
|
任意 | 挿入されるプレーンテキスト文字列 |
"insertFromPaste" ,
"insertFromPasteAsQuotation" ,
"insertFromDrop" ,
"insertTranspose" ,
"insertReplacementText" または
"insertFromYank"
|
input
または
textarea
|
挿入されるプレーンテキスト文字列 |
"formatSetInlineTextDirection" または
"formatSetBlockTextDirection"
|
任意 |
"ltr" , "rtl" , "auto"
または "null"
|
"formatBackColor" または
"formatFontColor"
|
任意 | CSS コンポーネント値の直列化文字列[CSSOM](提案色) |
"formatFontName"
|
任意 | font-family CSS プロパティの提案値 |
"insertLink"
|
任意 | 提案されるリンクのURL |
その他すべて | 任意 | null |
dataTransfer
は、
richtext やプレーンテキストデータのうち、
オブジェクトに格納されるべき関連データを保持します。
DataTransfer
inputType | 編集ホスト | dataTransfer |
---|---|---|
"insertFromPaste" ,
"insertFromPasteAsQuotation" ,
"insertFromDrop" ,
"insertTranspose" ,
"insertReplacementText" または
"insertFromYank"
|
contenteditable
|
あらかじめデータが入った
オブジェクト。以下の条件を満たすこと:
|
その他すべて | 任意 | null |
getTargetRanges()
は、イベントがキャンセルされなければ影響を受けるStaticRangesの配列を返します。
inputType | 編集ホスト |
getTargetRanges() の応答
|
---|---|---|
"historyUndo" または "historyRedo"
|
任意 | 空配列 |
その他すべて |
contenteditable
|
イベントに関連付けられたStaticRanges [DOM] の配列 |
その他すべて |
input
または
textarea
|
空配列 |
getTargetRanges()
は、inputType が "historyUndo"
または
"historyRedo"
である場合や、編集ホストが contenteditable 要素でない場合は空配列を返します。それ以外の場合は配列を返します。
beforeinput
タイプ |
beforeinput
|
---|---|
インターフェイス |
InputEvent
|
同期/非同期 | 同期 |
バブル | はい |
信頼できるターゲット |
contenteditable 属性が有効な任意の Element
|
既定の動作 [UI-EVENTS] |
inputType "insertCompositionText" の contentEditable=typing
編集ホストの場合は「DOMの更新」。
contentEditable="true" 編集ホストのすべての inputTypeの場合は「DOM要素の更新」。
それ以外はなし。
|
コンテキスト (信頼できるイベント) |
|
ユーザーエージェントは、ユーザーが contenteditable 要素に入力しようとした際に、必ずこのイベントを発行[UI-EVENTS]しなければなりません。 ただし、ユーザーエージェント [UI-EVENTS]が DOM を更新することを意味するわけではありません。
ユーザーエージェントは、ユーザー入力の試行によるものではないイベント(例えばシステムイベント)により、このイベントを発行[UI-EVENTS]してはなりません。
input
タイプ |
input
|
---|---|
インターフェイス |
InputEvent
|
同期/非同期 | 同期 |
バブル | はい |
信頼できるターゲット |
contenteditable 属性が有効な任意の Element
|
既定の動作 [UI-EVENTS] | なし |
コンテキスト (信頼できるイベント) |
|
ユーザーエージェント[UI-EVENTS]は、ブラウザーが文書内容の変更に対するユーザーの意図を処理した後、DOMが更新された直後に必ずこのイベントを発行[UI-EVENTS]しなければなりません。
このセクションは規範的ではありません。
この機能による既存イベント(keydown
や keypress
[UI-EVENTS]
イベントなど)ですでに利用可能な
フィンガープリント
[fingerprinting-guidance]
技術を除き、既知のセキュリティやプライバシーへの影響はありません。
この機能が既存イベントを置き換える場合、ユーザーの意図が記録されるため、利用したハードウェアの種類ではなく フィンガープリント [fingerprinting-guidance] 技術の利用可能性が低下する可能性があります。 意図の表明方法が記録されるためです。
Michael Aufreiter、Adrian Bateman、Oliver Buchtala、Robin Berjon、Enrica Casucci、Bo Cupp、Domenic Denicola、Emil Eklund、Olivier Forget、Aryeh Gregor、Marijn Haverbeke、Yoshifumi Inoue、Koji Ishii、Gary Kacmarcik、Ian Kilpatrick、Frederico Caldeira Knabben、Takayoshi Kochi、Piotrek Koszuliński、Travis Leithead、Grisha Lyukshin、Miles Maxfield、Chaals McCathie Nevile、Masayuki Nakano、Ryosuke Niwa、Julie Parent、Ben Peters、Florian Rivoal、Morgan Smith、Hallvord R. M. Steen、Johan Sörlin、Cristian Talau、Dave Tapuska、Ojan Vafai、Léonie Watson、Xiaoqian Wu、Chong Zhang、Joanmarie、そしてEditing Taskforceの皆様に感謝します。
Referenced in:
Referenced in:
Referenced in: