javascriptでハードウェアキーボードの存在を検出するための最良のクロスブラウザおよびクロスプラットフォームの方法は何ですか?
6 に答える
これは古い質問かもしれませんが、数か月前、私はこれに対する解決策を自分で探していました。Return
私は、誰かが物理キーボードを叩いたときにメッセージを送信するメッセージングシステムを構築していましたが、誰かReturn
が仮想キーボードを叩いたときに改行を挿入します。keydown
私がそれを解決した方法は、とイベント間の時間を数え、がヒットkeyup
したときの平均を取得することReturn
でした。
私はついにそれを私のブログで文書化することになりました。
理論的に反対のことを試していただけますか? キーボード ハードウェアを検出する代わりに、タッチ スクリーンを検出してみませんか? ontouchstart
イベントで;
if ('ontouchstart' in document.documentElement) {
// show icon
}
JS のキーボードは、OS API に委譲するブラウザー API を介してアクセスでき、物理キーボードがあるかどうかを判断することはできません。今すぐ物理キーボードのコードを切断し、仮想キーボードをオンにして、画面上のボタンをマウスでクリックすると、スクリプトがリッスンしているすべてのキーボード イベントが引き続きブラウザーによってトリガーされます。フォーム ブラウザ/JS の観点から見ると、仮想キーボードは物理キーボードと見分けがつきません。
そして、「存在」とは何を意味するのでしょうか? タッチ スクリーンとスライド アウト キーボードを備えた携帯電話を使用している場合、ブラウザは何らかの「keboardIn」/「keyboardOut」イベントをトリガーすると思いますか? ケーブルのプラグイン/アウトと同じですか? :)
アプリで絶対に物理キーボードが必要な場合は、ユーザーに通知/質問してください。
編集 - OPによる明確化後:
Facebookのチャットをご存知ですか?「Enter」キーを押すだけでメッセージを送信できます。「Enter」キーを置き換えるキーボード ボタンを持っていないユーザーを表示する必要があります。
したがって、テキスト入力のあるフォームを作成し、input/form イベントをリッスンするだけです。ほとんどの (すべての?) ソフト キーボードには、ある種の「完了」、「準備完了」、または同様のボタンがあります。「keyCode」が「13」に等しいかどうかを知る必要はありませんが、ユーザーが入力したものを送信する意図があることを検出します。または、最後の手段として、タッチ対応のデバイスを検出し、ボタンを表示します。( if('ontouchstart' in document.documentElement)/* show touch sbmit button */
)
if (confirm('Do you have hardware keyboard?')) {
} else {
}
問題のコメントの説明に従って編集します。
毎回 'Enter' をサポートし、タッチ スクリーン専用の 'Send' アイコン ( JavaScript を使用して 'タッチ スクリーン' デバイスを検出する最良の方法は何ですか? ) を追加し、マウスの 'ホバー' 疑似クラスとして追加するのはどうですか?