Copyright © 2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
EditContext は、著者がテキスト入力プロセスにより直接参加できるようにする API です。
このセクションは、公開時点での 文書のステータスについて説明します。現在の W3C 公開文書一覧およびこの技術レポートの最新改訂は、 W3C 標準および草案一覧 にあります。
この文書は Web 編集ワーキンググループ により、 勧告トラック を使用して 作業草案として公開されました。
作業草案としての公開は、W3C およびその会員による承認を 意味するものではありません。
この文書は草案です。今後、更新、差し替え、または廃止される可能性があります。 進行中の作業以外として引用するのは不適切です。
この文書は、W3C 特許ポリシー のもとで活動する グループによって作成されています。 W3C は、 グループの成果物に関連して公開された 特許開示リスト を維持しています。 そのページには特許開示の方法も記載されています。ある人物が必須クレームを 含む特許を知っている場合、その情報は 特許ポリシー第6節に 従って開示する必要があります。
この文書は 2025年8月18日 W3C プロセス文書 に よって管理されています。
このセクションは規定ではありません。
最新のオペレーティングシステムは、音声入力、ソフトウェアキーボード、手書き認識など、さまざまな方法でテキストを生成する仕組みを提供している。アプリがこれらさまざまなソースからのテキスト入力を受け取りたい場合、まず現在編集可能なテキストのビューを OS に提供する必要がある。編集可能テキストのビューは、(さまざまな文書モデルを持つ)アプリと(さまざまな入力手段を持つ)テキストソースの双方が理解できる共通言語を提供する。アプリと入力ソースの両方は、この共通ビューの状態に対する望ましい変更を、相手が処理可能なイベントとして表現することで、テキスト入力プロセスを成り立たせる。
本書においては、テキストの生成側を Text Input Method(テキスト入力メソッド)と呼ぶ。テキストを消費したいアプリが提供するビューは Text Edit Context(テキスト編集コンテキスト)と呼ぶ。Text Edit Context 内のテキスト編集を、Text Input Methods(テキスト入力メソッド)によって円滑に行えるようにする OS のサービスは、Text Input Service(テキスト入力サービス)と呼ぶ。
以下に、テキスト入力プロセスの典型的なフローをより詳しく示す:
既存のユーザーエージェントは、このテキスト入力プロセスの詳細を処理することで、文書のどの要素が編集可能領域を表すかを宣言するところまでを著者の責任範囲としている。著者は、input 要素、textarea
要素、contenteditable 要素を使用するか、または designMode
属性を "on" に設定して文書全体を編集可能としてマークすることで、どの領域が編集可能かを表明する。
文書内の編集可能領域にフォーカスが当てられると、ユーザーエージェントは、その編集可能領域の内容とその中の選択位置から Text Edit Context を自動的に生成する。Text Input Method がテキストを生成すると、ユーザーエージェントは、その Text Edit Context に対するイベントを、一連の DOM およびスタイルの変更に変換する。これらのうち、著者が既存のイベントで扱えるのは一部にすぎない。
高度な編集体験を提供したい著者にとって、現在のアプローチは課題となりうる。たとえば、テキストと選択範囲がキャンバスにレンダリングされている場合、ユーザーエージェントはテキスト入力プロセスを駆動するための Text Edit Context を生成できない。著者はこれを補うためにオフスクリーンの編集可能要素に頼ることになるが、この方法にはアクセシビリティ上の悪影響があり、入力体験を損ない、さらにキャンバス内のテキストとオフスクリーン編集要素内のテキスト位置を同期させる複雑なコードが必要になる。
この EditContext API を導入することで、著者はテキスト入力のプロトコルにより直接参加できるようになり、上述した問題を回避できる。
Text Input Service(テキスト入力サービス)と Text Edit
Context(テキスト編集コンテキスト)は、多くのオペレーティングシステムに共通するテキスト入力の側面を表現する抽象化である。
EditContext は、Text Edit
Context の JavaScript による表現である。
Text Edit Context に Text Input
Service による変更が加えられると、その変更はイベントという形で非同期に著者へと通知され、それらのイベントは active
EditContext に対してディスパッチされる。
著者が active EditContext に変更を加えると、その変更は次のライフサイクル更新時に Text Edit Context に反映される。
Text Edit Context と EditContext はどちらも、前述の更新でやり取りされる情報を保持する text state(テキスト状態)を持つ。text state は次の要素から構成される:
DOMString
である。初期値は空文字列である。
DOMRect であり、text が表示されるビューポート領域を表す。これは client coordinate
system(クライアント座標系)における値であり、初期の x, y, width, height はすべて 0 である。DOMRect である。これは client coordinate system における値であり、初期の x, y,
width, height はすべて 0 である。DOMRect
の配列である。配列の初期値は空である。text format は、text の特定範囲に適用される装飾プロパティを示す構造体である。この構造体は次の要素を含む:
UnderlineStyle である。UnderlineThickness である。
Codepoint rects
は、ユーザーエージェントがテキストのある範囲に対して位置情報を問い合わせるための手段を提供する。Text Input Service は、この情報を control bounds および selection bounds と組み合わせて用い、Text Input Method
が自らのユーザーインターフェイスを適切に表示できるよう支援する。たとえば、この情報は、合成中のテキストの隣に IME ウィンドウを配置するために利用できる。
プラットフォームによっては、Text Input Service
からの問い合わせに応えるために、異なる位置情報をキャッシュしておく必要がある場合がある。ユーザーエージェントは、CharacterBoundsUpdateEvent
を発火することで、どの位置情報が必要かを示す。
Control bounds、selection bounds、および codepoint rects は、client coordinate system(クライアント座標系)で与えられる。これは、原点をレイアウトビューポートの左上とし、 x 軸をレイアウトビューポートの右方向、 y 軸をレイアウトビューポートの下方向とする 2 次元直交座標系 (x, y) と定義される。 クライアント座標系の単位は CSS pixels である。
EditContext の境界は client coordinates(クライアント座標)で定義されるため、ページ上のあるコンテンツに対応する座標は、そのコンテンツ自体が文書内で移動していなくても、ユーザーが文書をスクロールすると変化する。著者がこれを考慮したくなるシナリオの一例として、ユーザーがアクティブな合成中にページをスクロールする場合が挙げられる。もし著者が(たとえばスクロールイベントリスナー内で)EditContext の境界情報を更新しなければ、IME ウィンドウは合成中のテキストと位置がずれたまま、合成が続く間表示される可能性がある。
しかし、プラットフォームによっては、アクティブな合成中に IME ウィンドウの位置調整を行わないものもあるため、合成の途中で境界情報を更新しても、IME ウィンドウが再配置されるのは、それが閉じられて再度開かれた後になる場合がある。
EditContext は、associated element(関連付けられた要素)として HTMLElement
を 1 つ持つ。要素がある EditContext の associated element になるのは、その要素の editContext プロパティにその EditContext を代入したときである。
HTMLElement
は、高々 1 つの EditContext とだけ 関連付け ることができる。
EditContext は、自身の associated element を生存させ続ける。そのため、開発者は、ある要素の EditContext をその要素の editContext
プロパティに代入すると、そのプロパティがクリアされるか、その EditContext
自体がガーベジコレクションされるまで、その要素はガーベジコレクションされないことに注意すべきである。
ある EditContext の associated
element の
親 が
editable ではなく、
かつ Document
ではない場合で、その designMode
属性が "on" でもないとき、
その associated element は EditContext editing host(EditContext 編集ホスト)となる。
EditContext editing host は、editing host
の一種であり、その振る舞いは 1.2.3
Differences for an EditContext editing host に記述される。
これにはいくつかの含意がある。まず、すでに
editing
host となっている要素(たとえば
contenteditable
によって編集ホストとなっている要素)が、ある EditContext の associated element となった場合、その要素は EditContext editing host
になる、という点である。言い換えると、ある要素に対して EditContext と
contenteditable
の両方が設定されている場合、EditContext の振る舞いが優先される、ということである。
次に、ある要素が
editable
であっても editing
host ではない場合(すなわち、ある editing
host のサブツリー内の子要素である場合)、その要素がある EditContext の associated element
になっても、その要素には何の影響もない、という点である。これは、
contenteditable
の挙動に類似しており、すでに editable ではあるが editing
host ではない要素に対して
contenteditable
を "true" に設定しても何も起こらないのと同じである。まとめると、これらのルールは、編集可能なノードの木は、EditContext ベースの挙動、または非 EditContext
ベースの挙動のいずれか一方にのみ従い、両者を混在させることはできないことを意味する。
Document は、null であることもある active
EditContext(アクティブな EditContext)を持つ。
次の段落は、動作変更が [input-events] に反映されたら削除できる。
EditContext editing host が Text Input Service からテキスト入力を受け取った場合、その入力によって発火した beforeinput イベントの既定の動作として、ユーザーエージェントは、その EditContext editing host を引数に、Handle Input for EditContext を実行しなければならない。
多くの点で、EditContext editing
host は、たとえば
contenteditable
要素に対するもののような、他の種類の editing
host と同様に振る舞う。主な類似点としては次のようなものがある:
contenteditable
属性が "false" に設定されていない限り、editable になる。
一方で、EditContext editing host は、他の種類の editing hosts と異なる点もいくつか存在する:
Document に active EditContext が存在する場合、ユーザーエージェントは、EditContext editing host
内でのユーザー操作(編集可能領域でのキーボード入力、テキストの削除や書式変更など)の直接の結果として DOM を更新してはならない。
Document に active EditContext
が存在する場合、ユーザーエージェントは、[uievents] に規定されるようなユーザー操作イベントの直接の結果として、EditContext editing host に対して input イベントを発火してはならない。
Document に active EditContext
が存在する場合、ユーザーエージェントは、ユーザー操作の直接の結果として、EditContext editing host に対して composition events
を発火してはならない。その代わり、それらは EditContext に対して、updating the EditContext(EditContext
の更新)または deactivating the
EditContext(EditContext の非アクティブ化)の一部として発火される。
active EditContext の associated element が canvas である場合、さらなる差異が存在する:
ユーザーエージェントはいくつかの種類のイベントを EditContext に対して発火し、Text Input Service からの変更に応じて DOM の状態を更新すべきタイミングや、Text Input Service からの問い合わせに応答すべきタイミングを著者に知らせる。
Text Input Service
のタイミングはプラットフォーム固有であるため、著者はこれらのイベントのタイミングに依存することは避けるべきである。
TextUpdateEvent
を発火しなければならない。著者はこのイベントを受け取ったら、ユーザーが入力している内容が視覚的に分かるように、その変更をページのビューに反映しなければならない。
Text Input Service
が、合成中のテキストに特定の書式を適用すべきであると示した場合、ユーザーエージェントは TextFormatUpdateEvent
を発火しなければならない。著者はこのイベントを受け取ったら、IME 合成を支援するために、その書式変更をページのビューに反映しなければならない。
指紋採取のリスクを軽減するために、ユーザーエージェントは TextFormatUpdateEvent
をディスパッチする前に、UnderlineStyle や UnderlineThickness
を調整してもよい。これは、特徴的なスタイル特性を持つ入力メソッドが使用されている場合に特に重要となりうる。
Text Input Service
が、そのユーザーインターフェイスを適切に表示するために文字境界情報を必要としていることを示した場合、ユーザーエージェントは CharacterBoundsUpdateEvent
を発火しなければならない。
著者は CharacterBoundsUpdateEvent
を受け取ったら、要求された文字境界を計算し、その情報を EditContext の text state
内の文字境界として更新するために updateCharacterBounds
を呼び出さなければならない。
著者は可能であれば、CharacterBoundsUpdateEvent
のイベントハンドラ内で同期的に updateCharacterBounds
を呼び出すべきである。もしそれが不可能であれば、非同期的に呼び出してもよい。
ユーザーエージェントは、updateCharacterBounds
を受け取ったら、その文字境界情報を Text Input Service
に渡さなければならない。
著者が updateCharacterBounds
の呼び出しを遅らせれば遅らせるほど、合成の途中で IME ウィンドウが再配置される際に、ユーザーが視覚的なカクつきを目にする可能性は高くなる。
新たなステップが、HTML のイベントループ処理モデルにおける Update the
rendering(レンダリングの更新)ステップのサブステップとして導入される。このステップは、Document の focused area がフォーカス不可能になった
Document に対するフォーカシングステップを実行する 15
番目のステップの直後に挿入される。
その内容は次のとおりである:各
fully
active
な Document doc
について、doc の relevant
global object に対し、DOM
manipulation task source 上で queue a global
task を行い、
doc を引数として Update the Text Edit
Context(Text Edit Context の更新)手順を実行する。
このセクションは規定ではありません。
EditContext を使用すると、著者は、以下の例に示すように、ある要素に associating(関連付け) られた EditContext オブジェクトを通じて、文書の一部分を編集可能領域としてマークできる:
次の例では、著者はキャンバスを使って編集可能領域を描画し、等幅フォントでレンダリングされた 1 行のテキストの入力をユーザーに許可している。編集可能領域のテキストは、著者によって String として管理される。編集可能領域内の選択のテキストオフセットは、selectionStart と selectionEnd という数値のペアとして著者によって管理される。これらの数値は、それぞれ選択開始位置と終了位置より左側にある UTF-16 コードポイントの数を表す。文書内の編集可能領域および現在の選択に対するバウンディング矩形を Text Input Services に伝えるために、著者は CSS ピクセル単位で選択と編集可能領域のバウンディング矩形も計算する。矩形のオフセットは、著者が EditContext を associated している要素である canvas 要素の原点を基準に表現される。著者側のテキストおよび選択位置の表現モデルは、EditContext API が期待する形式と一致しているため、著者はそれらのプロパティが変化するたびに、それらの値をキャンバスに関連付けられた EditContext に単純に代入するだけでよい。
前の例を基にして、ユーザー入力に応じて、著者は編集可能要素(この場合は canvas)と EditContext の両方のイベントを処理すべきである。
DOM に対する input イベントは引き続きユーザーの意図を表現する。
次の例では、TextUpdateEvent、TextFormatUpdateEvent、および CharacterBoundsUpdateEvent
を処理してモデルを更新し、その結果をキャンバスにレンダリングする方法を示す。
このセクションは規定ではありません。
著者は必ずしも EditContext とともに canvas 要素を使用しなければならないわけではない。次の例では、著者は div を用いて文書の編集可能領域を確立し、その中にさまざまなスタイル付き要素、画像、テキストなどを使ってコンテンツをレンダリングしている。これにより著者は、選択やスペルチェックといったユーザーエージェントの他の組み込み編集プリミティブを活用できるようになる。
規定ではないと示されたセクションに加え、本仕様におけるすべての作成ガイドライン、図、例、および注記は規定ではない。それ以外の本仕様のすべては規定である。
本仕様は、単一の製品に適用される適合性基準を定義する:すなわち、本仕様に含まれるインターフェースを実装するユーザーエージェントである。
アルゴリズムまたは特定の手順として表現された適合性要件は、最終結果が同等である限り、どのような方法で実装してもよい。(特に、本仕様で定義されるアルゴリズムは追いやすいことを意図しており、高性能であることを意図していない。)
WebIDLpartial interface HTMLElement {
attribute EditContext? editContext;
};
HTMLElement
は、内部スロット [[EditContext]] を持つ。これは EditContext への参照であり、初期値は null
である。
editContext の getter 手順は、this の内部 [[EditContext]]
スロットの値を返すことである。editContext の setter
は、次の手順に従わなければならない:
canvas" でもない場合、"NotSupportedError"
DOMException
を throw する。
NotSupportedError"
DOMException
を throw する。
NotSupportedError"
DOMException
を throw する。
HTMLElement
editContext と Text Edit Context の text state の text、text formats、 selection start、selection end、is composing、composition start、 および composition end を与えて、Update the EditContext の手順を実行する。
Text Edit Context は、異なるオペレーティングシステムにおけるテキスト入力の共通の側面に対する抽象化であるため、Text Edit Context における値の決定方法は、本仕様では明示的に与えられていない。これらはオペレーティングシステムや入力デバイスによって異なる。
insertTextinsertTransposedeleteWordBackwarddeleteWordForwarddeleteContentdeleteContentBackwarddeleteContentForwardEditContext
が扱う inputType
は、生のテキストのみに対して操作を行うものに限られる。書式、クリップボード/ドラッグ&ドロップ、取り消し(undo)、あるいはスペルチェックのようなブラウザー UI に依存する他の
inputType は、EditContext の状態にそれらの概念が含まれないため、EditContext では扱えない。著者がアプリケーション側でそれらの inputType
を扱いたい場合は、beforeinput
イベントハンドラにおいて手動で処理する必要がある。
EditContextCompositionEvent
を用いて発火する。
CompositionEvent
を用いて発火する。
CompositionEvent
を用いて発火する。
DocumentText Edit Context の text state を更新する手順は、プラットフォーム固有の Text Input Service 上に構築された抽象化の性質に依存する点に注意。 それらの詳細は本仕様の対象外である。
EditContextTextUpdateEvent
を用いて発火し、text を text で初期化し、selectionStart を
|editContext の selection start で初期化し、selectionEnd を
editContext の selection
end で初期化する。
EditContextTextFormat
の配列(初期値は空)とする。
TextFormat
とし、rangeStart、rangeEnd、underlineStyle、underlineThickness
を持つものとする。
rangeStart を
format の range start に設定する。
rangeEnd を
format の range end に設定する。
underlineStyle を
format の underline style
に設定する。
underlineThickness
を format の underline thickness に設定する。TextFormatUpdateEvent
を用いて発火し、その TextFormatUpdateEvent の text format list を
formats で初期化する。
EditContextCharacterBoundsUpdateEvent
を用いて発火し、rangeStart を
editContext の composition start で初期化し、rangeEnd
を editContext の composition end で初期化する。
EditContextCompositionEvent
を用いて発火する。
DocumentEditContext、または null。focused が null であるか、または focused の shadow-including root が document でない場合、null を返す。
top-level traversable を経由して focusable を取得する目的は、各 top-level traversable につき同時に 1 つだけ active EditContext が存在するようにしたいためである。したがって、システムフォーカスが別の文書にある場合、この文書は active EditContext を持てない。
ある EditContext の associated element の親が editable である場合、その EditContext
は active EditContext になれない。これは、その親が別の EditContext によって editable であるか、または
contenteditable
によって editable であるかにかかわらず当てはまる。
WebIDLdictionary EditContextInit {
DOMString text;
unsigned long selectionStart;
unsigned long selectionEnd;
};
[Exposed=Window]
interface EditContext : EventTarget {
constructor(optional EditContextInit options = {});
undefined updateText(unsigned long rangeStart, unsigned long rangeEnd,
DOMString text);
undefined updateSelection(unsigned long start, unsigned long end);
undefined updateControlBounds(DOMRect controlBounds);
undefined updateSelectionBounds(DOMRect selectionBounds);
undefined updateCharacterBounds(unsigned long rangeStart, sequence<DOMRect> characterBounds);
sequence<HTMLElement> attachedElements();
readonly attribute DOMString text;
readonly attribute unsigned long selectionStart;
readonly attribute unsigned long selectionEnd;
readonly attribute unsigned long characterBoundsRangeStart;
sequence<DOMRect> characterBounds();
attribute EventHandler ontextupdate;
attribute EventHandler ontextformatupdate;
attribute EventHandler oncharacterboundsupdate;
attribute EventHandler oncompositionstart;
attribute EventHandler oncompositionend;
};
text の getter 手順は、this の text を返すことである。selectionStart の getter 手順は、this の selection start を返すことである。selectionEnd の getter 手順は、this の selection end を返すことである。characterBounds の getter 手順は、this の codepoint rects を返すことである。characterBoundsRangeStart
の getter 手順は、this の codepoint rects start index を返すことである。このメソッドは次の手順に従わなければならない:
このメソッドは次の手順に従わなければならない:
このメソッドは次の手順に従わなければならない:
DOMRectこのメソッドは次の手順に従わなければならない:
DOMRectこのメソッドは次の手順に従わなければならない:
DOMRect の配列このメソッドは、EditContext の associated element を唯一の要素として持つリストを返す。ただし、EditContext の associated element が null の場合は空のリストを返す。
このメソッドが単一の要素ではなくリストを返すのは、将来、EditContext が複数の associated elements を持てるようになった場合の前方互換性のためである。
TextUpdateEvent のイベントハンドラ。
CharacterBoundsUpdateEvent
のイベントハンドラ。
TextFormatUpdateEvent のイベントハンドラ。
compositionstart イベントのイベントハンドラ。
compositionend イベントのイベントハンドラ。
WebIDLdictionary TextUpdateEventInit : EventInit {
unsigned long updateRangeStart;
unsigned long updateRangeEnd;
DOMString text;
unsigned long selectionStart;
unsigned long selectionEnd;
unsigned long compositionStart;
unsigned long compositionEnd;
};
[Exposed=Window]
interface TextUpdateEvent : Event {
constructor(DOMString type, optional TextUpdateEventInit options = {});
readonly attribute unsigned long updateRangeStart;
readonly attribute unsigned long updateRangeEnd;
readonly attribute DOMString text;
readonly attribute unsigned long selectionStart;
readonly attribute unsigned long selectionEnd;
};
updateRangeStart, of type
unsigned long, readonlyupdateRangeEnd, of type
unsigned long, readonlytext, of type DOMString, readonlyselectionStart, of type
unsigned long, readonlyselectionEnd, of type unsigned
long, readonlyWebIDLenum UnderlineStyle { "none", "solid", "dotted", "dashed", "wavy" };
enum UnderlineThickness { "none", "thin", "thick" };
dictionary TextFormatInit {
unsigned long rangeStart;
unsigned long rangeEnd;
UnderlineStyle underlineStyle;
UnderlineThickness underlineThickness;
};
[Exposed=Window]
interface TextFormat : EventTarget {
constructor(optional TextFormatInit options = {});
readonly attribute unsigned long rangeStart;
readonly attribute unsigned long rangeEnd;
readonly attribute UnderlineStyle underlineStyle;
readonly attribute UnderlineThickness underlineThickness;
};
dictionary TextFormatUpdateEventInit : EventInit {
sequence<TextFormat> textFormats;
};
[Exposed=Window]
interface TextFormatUpdateEvent : Event {
constructor(DOMString type, optional TextFormatUpdateEventInit options = {});
sequence<TextFormat> getTextFormats();
};
rangeStart, of type unsigned long,
readonlyrangeEnd, of type unsigned long,
readonlyunderlineStyle, of type UnderlineStyle, readonlyunderlineThickness, of type UnderlineThickness,
readonlygetTextFormats method
TextFormatUpdateEvent
は、関連付けられた text
format list を持つ。これは、0 個以上の text format からなるリストである。
WebIDLdictionary CharacterBoundsUpdateEventInit : EventInit {
unsigned long rangeStart;
unsigned long rangeEnd;
};
[Exposed=Window]
interface CharacterBoundsUpdateEvent : Event {
constructor(DOMString type, optional CharacterBoundsUpdateEventInit options = {});
readonly attribute unsigned long rangeStart;
readonly attribute unsigned long rangeEnd;
};
rangeStart, of type
unsigned long, readonly
rangeEnd, of type
unsigned long, readonly
WebIDLpartial interface HTMLElement {
attribute EditContext? editContext;
};
dictionary EditContextInit {
DOMString text;
unsigned long selectionStart;
unsigned long selectionEnd;
};
[Exposed=Window]
interface EditContext : EventTarget {
constructor(optional EditContextInit options = {});
undefined updateText(unsigned long rangeStart, unsigned long rangeEnd,
DOMString text);
undefined updateSelection(unsigned long start, unsigned long end);
undefined updateControlBounds(DOMRect controlBounds);
undefined updateSelectionBounds(DOMRect selectionBounds);
undefined updateCharacterBounds(unsigned long rangeStart, sequence<DOMRect> characterBounds);
sequence<HTMLElement> attachedElements();
readonly attribute DOMString text;
readonly attribute unsigned long selectionStart;
readonly attribute unsigned long selectionEnd;
readonly attribute unsigned long characterBoundsRangeStart;
sequence<DOMRect> characterBounds();
attribute EventHandler ontextupdate;
attribute EventHandler ontextformatupdate;
attribute EventHandler oncharacterboundsupdate;
attribute EventHandler oncompositionstart;
attribute EventHandler oncompositionend;
};
dictionary TextUpdateEventInit : EventInit {
unsigned long updateRangeStart;
unsigned long updateRangeEnd;
DOMString text;
unsigned long selectionStart;
unsigned long selectionEnd;
unsigned long compositionStart;
unsigned long compositionEnd;
};
[Exposed=Window]
interface TextUpdateEvent : Event {
constructor(DOMString type, optional TextUpdateEventInit options = {});
readonly attribute unsigned long updateRangeStart;
readonly attribute unsigned long updateRangeEnd;
readonly attribute DOMString text;
readonly attribute unsigned long selectionStart;
readonly attribute unsigned long selectionEnd;
};
enum UnderlineStyle { "none", "solid", "dotted", "dashed", "wavy" };
enum UnderlineThickness { "none", "thin", "thick" };
dictionary TextFormatInit {
unsigned long rangeStart;
unsigned long rangeEnd;
UnderlineStyle underlineStyle;
UnderlineThickness underlineThickness;
};
[Exposed=Window]
interface TextFormat {
constructor(optional TextFormatInit options = {});
readonly attribute unsigned long rangeStart;
readonly attribute unsigned long rangeEnd;
readonly attribute UnderlineStyle underlineStyle;
readonly attribute UnderlineThickness underlineThickness;
};
dictionary TextFormatUpdateEventInit : EventInit {
sequence<TextFormat> textFormats;
};
[Exposed=Window]
interface TextFormatUpdateEvent : Event {
constructor(DOMString type, optional TextFormatUpdateEventInit options = {});
sequence<TextFormat> getTextFormats();
};
dictionary CharacterBoundsUpdateEventInit : EventInit {
unsigned long rangeStart;
unsigned long rangeEnd;
};
[Exposed=Window]
interface CharacterBoundsUpdateEvent : Event {
constructor(DOMString type, optional CharacterBoundsUpdateEventInit options = {});
readonly attribute unsigned long rangeStart;
readonly attribute unsigned long rangeEnd;
};
貢献者を追加
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: