HTML5 Forms の type 指定がデスクトップ IMEに影響するという話
最近やっていた仕事について,一通りリリースが終わって誰でも試せる段階になったので書いてみる.Web アプリ開発者の人や,IME 作成者の人には影響があるかも知れない.ただし Windows デスクトップを相手にしていなければ,ここで読むのをやめてもなんら問題はない.
最近 Chromium と Firefox にパッチを書いて,HTML5 Forms の type 指定が InputScope として TSF ベースの IME (いわゆる Text Input Processors; TIP) やソフトウェアキーボードに通知されるようにした.これは,基本的に Windows 8 上での Internet Explorer 10 の動作に合わせたものである.具体的には,以下の環境で,各種ブラウザが InputScope をサポートするようになった.
- Microsoft Internet Explorer 10以降 (ただし Windows 8以降)
- Google Chrome 26以降 (ただし Windows Vista以降)
- Mozilla Firefox 23以降 (ただし Windows Vista以降)
なぜこれが問題になるのか.それは,一部の InputScope が指定されたとき,(Windows Vista 以降の) MS-IME は自動的に自分自身をオフにするからだ.
モダンなブラウザの実装では,HTML5 Forms input 要素の type 属性に,number, email, tel, time (Firefox 23+ の場合のみ), url のいずれかを指定したときこの「一部の InputScope」に該当する.結果として,対応する InputScope を受け取った MS-IME は自分自身のモードをオフに設定する.
ポイントは,これが IME 自身の判断によって行われるモード変更ということだ.この挙動についてブラウザベンダーを責めるのは難しい.ブラウザは単に対応する InputScope を IME に伝えているだけである.この点で,非標準の CSS に存在する ime-mode とは大きく異なる (ただし,type = password だけは以前からブラウザ自身が IME をオフにしている).
影響を受けないのは,
- TSF 非対応の IME を使っている場合
- InputScope を無視する IME を使っている場合 (たとえば ATOK 2013 とそれ以前)
- Windows XP で上記ブラウザを使っている場合
である.なお,各 InputScope に対する挙動は各 IME にゆだねられているため,今後のアップデートで振る舞いが変化する可能性もある.
まとめ
InputScope に対応したデスクトップブラウザ
- Microsoft Internet Explorer 10以降 (ただし Windows 8以降)
- Google Chrome 26以降 (ただし Windows Vista以降)
- Mozilla Firefox 23以降 (ただし Windows Vista以降)
InputScope に対応した IME
- Microsoft IME (Windows Vista以降)
- Mozc / Google 日本語入力 1.11.x 以降 (TSF モードのみ)
HTML5 Forms の input 要素の type
- number
- tel
- time (Firefox 23+ の場合のみ)
- url
の組み合わせで,(結果として) IME がオフになる.これは IME が自主的に行っているもので,ブラウザ側から IME のオフを設定しているわけではない.この動作に関して意見がある場合,基本的には IME ベンダーへどうぞということになる.
謝辞
Mozilla Firefox への InputScope 対応パッチについて,Mozilla Japan の中野さんにレビュー等たいへんお世話になりました.この場をお借りしてお礼申し上げます.
余談 0
各ブラウザでの Forms の type と InputScope の対応については Mozc のデザインドキュメントでまとめておいた.詳細についてはそちらを参考にしてほしい.
https://code.google.com/p/mozc/wiki/InputScope#Scope
余談 1
Windows 8 の Immersive モードで,MS-IME 2012 は入力モードをカーソル周辺に表示するようになった.今後,自動モード変更が受け入れられていくためには,このようなモード表示は必須と考えられる.
余談 2
InputScope に応じて,IME は変換に関する挙動を最適化することができる.たとえば,InputScope が「サーチ」のときに名詞中心のサジェストを行う,といった最適化が考えられる.実際すでに MS-IME 2012 は InputScope が「サーチ」のときに,挙動を変えている.
余談 3
現在 W3C で (主にデスクトップ向けの) IME API が議論されている.その流れの中で Microsoft から inputmode という追加の属性が提案されている.
https://dvcs.w3.org/hg/ime-api/raw-file/tip/proposals/IMEProposal.html#inputmode-attribute
この属性を使うと,ひらがなモードやカタカナモードといった,より日本人になじみが深い入力モードを指定できるようになる.InputScope にはこういったモードが既に存在するため,将来的には「半角カタカナモード」が期待される入力フィールド,といったものが HTML5 で実現可能になる可能性がある.興味がある人が議論に参加して欲しい.
余談 4
Tablet PC の時代に InputScope が設計され,10 年以上たってようやく HTML と InputScope が結びついたわけであるが,ブラウザでの InputScope への取り組み自体は以前から存在する.
たとえば Google Summer of Code 2008 では,Mozilla に対して -moz-input-scope という拡張が試みられた.
https://wiki.mozilla.org/Community:SummerOfCode08:TSF
余談 5
Input 要素の type 指定だが,実際のところモバイル用途の方が需要は高い.理由として,ソフトウェアキーボードのレイアウトが Input 要素の typeによって変化すると便利であること,CJK以外の国でもソフトウェアキーボードが使用されること,が挙げられる.