iOSは Javascript で音量ボタンが押されたかどうか取得できない??? #iOS #Javascript
— 宇奈月けやき (@UNADUKI_Keyaki) August 4, 2018
事の発端は 3/6 に作った福引きシステムを Bluetooth のシャッターボタンでも引けるようにするという要望だった。夏コミが近くなり、この福引きシステムを夏コミにも使うのだが、前回、お客さんがなかなか引けないという場面があり、列が伸びてしまったらしいのだ。
お客さんがひけなかった原因は、単純に「タッチ」しなければならないのに、画面にタッチした時、指を画面から離す前に指で画面をこすってしまい、タッチとして判定されなかったためだ(スワイプとして判定されてしまう)。緊張したのかなんなのか解らないが、そういうお客さんが多かったらしい。なかなか引けなくて後ろの列が伸びてしまった。列が伸びると次のサークルを回りたい人はさっさと諦めて引かずに行ってしまうらしい。
そこで対策としてリモコンのシャッターボタンを押して貰えば、失敗が少ないのではないかというわけだ。
リモコンのシャッターボタンはキーとしては【Volume Up】の信号が送られてくる。
確かにスマートフォンを横向きに構えると音量ボタンがちょうどシャッターボタンぽい位置に来る。
なので Javascript でシャッターボタンを拾うように組んでみた。とりあえず Windows の Edge で実験。ちゃんと動いた。
ところが iPhone ではウンともスンとも言わない。んー? なんだ?
シャッターボタンは拾えないのかな?
そこで、どんなキーを押しても動くように組み直してみる。
それでも iPhone だと何も起きない。おいおい、どういうことだよ。
そこで気づいたのが、iPad だ。ボクの iPad にはキーボードが着いている。これなら絶対に動くはずだ!!
ところが、iPad + キーボードでも動かなかった!!
iOSでキーボードイベントとれないなーって思ったら、キーボードが画面に表示されてないとイベントが発生しないことが判明。しかも、Bluetoothキーボードがつながってても発生しない。なにこのクソ仕様。ちなみにフォーム内では発生した。 #iOS #JavaScript #キーボード https://t.co/bJr58jONMH
— 宇奈月けやき (@UNADUKI_Keyaki) August 4, 2018
ここに来て初めてボクはググった。そしたらなんと、画面にキーボードが表示されていないと、iOS ではキー割り込みが発生しないのだった!!! なんだこのクソ仕様は!!! つまり Javascript では何をしようがどうしようが Form の上か画面にキーボードが表示されていないと、キー情報をとることができないのだ(ちなみに Android はできる)。
というわけで、リモコンのシャッターボタンでは iOS ではクジは引けない。回避方法はないのだ。この一連の変更はすべて無駄となった。
で、結局どうしたかというと、スワイプでも引けるようにとりあえずした。
ただこれでお客さんの失敗が減るかどうかは、夏コミに実際に引いてもらわないと解らない。それはまたその日の日記に。