siteHOMEまとめOSSOthersContactメニューRSSFeedlyホーム>技術メモBluetoothバーコードスキャナ使用の際のブラウザ入力フィールドの制御2018年10月22日PC・スマートフォンに関わらず、ブラウザの特定の入力フィールドにBluetooth接続(PCの場合はUSB接続でもよい)のバーコードスキャナでバーコードを入力したい。やりたいことはこうである。あるページが表示されたら、バーコード入力領域にフォーカスを当てる。スキャナからバーコード文字列がきたら、それをシステムに入力し商品データ等を拾う。ユーザが数量等を手入力する。終了したら最初に戻る。これには数々の問題がある。目次iPhoneではフォーカスが移らないソフトキーボードを表示させるソフトキーボードを表示させない日本語入力モード中のEnterキーの問題iPhoneではフォーカスが移らないiPhoneの特殊な仕様により、プログラム側からフォーカスの指示を出しても効果が無い。入力フィールドをタップしないと移らないのである。「あるページを開いたら、特定の入力フィールドにフォーカスし、すぐにユーザ入力を受け付ける」ということができないのである。これについては、iPhoneのSafariで入力フィールドにフォーカスが移らないに書いた。現実的な解決策としては、Safariを使わず、Firefox等を使うことかと思われる(未確認)。ソフトキーボードを表示させるスマートフォンのデフォルトでは、Bluetoothスキャナなりを接続するとソフトキーボードは表示されなくなる。スキャナもキーボードと認識されているので、「キーボードが接続されたのだからソフトキーボードは不要だろう」というわけだ。スキャナであり、キーボードではないので、ほとんど何も入力できなくなってしまう。これでは困るので、「ソフトキーボードを表示する」オプションを選択することもできる。Androidの場合には、設定>言語と入力>現在のキーボードをクリックすると、スキャナを接続していない時は、以下の表示であるが、スキャナを接続すると、以下のようなスイッチが現れる。このスイッチをONにすれば、スキャナ接続中でもソフトキーボードが現れるソフトキーボードを表示させないしかし、逆にバーコード入力中等にはソフトキーボードを表示させたくない。この方策としては入力フィールドフォーカス時に一時的に入力不可状態にするというものがある。–>後述する日本語入力モード中のEnterキーの問題PCでもスマフォでも同じだが、日本語入力モードになっていると入力した文字列が変換候補となってしまい、その次にEnterがやってきてもEnterとみなされず、変換確定として消費されてしまう。これを避けるには、連続した一連の文字列が入力された後で、いくばくかの休止があった場合(数十ミリ~数百ミリ秒)には自動的にEnterされたものとして処理してしまうことが考えられる。JavaScript(当方ではGWTを使用しているが)では、KeyPressやChangeイベントは使いものにならない。jQueryでテキストボックスの変更を監視/検知するに記述があるが、KeyUpイベントを監視することでしか漢字変換入力時のイベントは捕捉できないのである。KeyUpイベントでEnterキーがやってきたときは普通に入力し、Enterキーがやってこなくとも何らかの文字が入力されており一定時間経過した場合は自動でEnterとみなすことにする。ここにも落とし穴があるのである。ブラウザによって挙動が異なるのだ。イベントを見てみると、Firefoxでは日本語確定に使用されたEnterが伝達されてくるのだが、Chromeでは伝達されない。これについても注意が必要だ。コメントをキャンセルメールアドレスが公開されることはありません。*ウェブサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。