Chrome v56の全角変換中の入力をJSから更新した際の不具合

  • 2
    いいね
  • 0
    コメント

この記事の趣旨

例えば、JavaScript で

「テキストフィールド1の全角入力中2input要素.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 が v56 のとき)

一般ユーザとしては不具合報告はしましたが、返答はありません。
公式からの回答を積極的に得たい、とすればこの辺りに出現したり投稿したりすることになるのではないでしょうか。

対処案

  • keyup イベント開始時点で input.value が空文字列で無ければいいので、keydown イベントなどで直前に input.value = " "; を挿入して空文字列でないようにする。
  • 全角入力中に input.value を更新するような実装を諦め、全角入力確定時のみに行うようにする。
    • 全角入力の確定イベントは、CompositionEvent を利用すれば、IE10,11 を含むどのブラウザでも安定して判別できます。
  • というか、本当に重要な機能でなければ、入力値を整形する場合はそのテキストフィールドからフォーカスを外したタイミングで行うのが一番良い選択だと思います。

追記

  • バージョン 57.0.2987.98 でも同様の状態でした

脚注


  1. 「テキストフィールド」は、type="text" の input 要素のことを意味しています。 

  2. この状態を示す正式な名称は不明です。IME mode という単語は良く見かけました。 

  3. これを示す正式な名称は不明です。IME window という単語がよく見かけました。