この記事の趣旨
例えば、JavaScript で
「テキストフィールド1の全角入力中2に input要素.value
を更新することで、
その全角入力ウィンドウ3を強制的に閉じる」
という実装をしている場合に、Chrome v56 で不具合らしき挙動になる点の調査結果です。
v56
として言及している対象の Chrome のバージョンは、正確には 56.0.2924.87
です。
不具合らしき挙動とは
文章で説明すると、
「ある input 要素をフォーカスして全角モードでキー入力を行った場合、
1 文字目の keyup イベントの開始時点で input.value
の値が空文字列の場合、
その後全角入力を確定しても、全角入力ウィンドウがブラウザの input 要素に残る。」
という挙動です。
確認用の CodePen スクリプトは以下です。
http://codepen.io/kjirou/pen/OWKNey
この挙動は不具合ですか?
詳細は不明です。
ただ、少なくとも v55 ではこのような挙動にはなりませんでした。
ちょっとわかり難いですが、以下が v55 と v56 の比較になります。
Chrome が v55 のとき)
Chrome、全角モードのkeyupイベント内でinput.valueを更新したときの挙動がやっぱり変わってる.. こっちが v55 のときで pic.twitter.com/lbAn48LnEz
— kjirou (@kjirou) 2017年2月7日
Chrome が v56 のとき)
こっちが v56、表示上は見えないけど変換中の文字が埋まってて変換のドロップダウンが残ったままだ pic.twitter.com/BBBCudWHGy
— kjirou (@kjirou) 2017年2月7日
一般ユーザとしては不具合報告はしましたが、返答はありません。
公式からの回答を積極的に得たい、とすればこの辺りに出現したり投稿したりすることになるのではないでしょうか。
- Google Chrome ヘルプ フォーラム
- Chromium の Issues
対処案
- keyup イベント開始時点で
input.value
が空文字列で無ければいいので、keydown イベントなどで直前にinput.value = " ";
を挿入して空文字列でないようにする。 - 全角入力中に
input.value
を更新するような実装を諦め、全角入力確定時のみに行うようにする。- 全角入力の確定イベントは、
CompositionEvent
を利用すれば、IE10,11 を含むどのブラウザでも安定して判別できます。
- 全角入力の確定イベントは、
- というか、本当に重要な機能でなければ、入力値を整形する場合はそのテキストフィールドからフォーカスを外したタイミングで行うのが一番良い選択だと思います。
追記
-
バージョン 57.0.2987.98
でも同様の状態でした