如何使用javascript检测硬件键盘的存在?

时间:2013-09-18 19:01:22

标签: javascript keyboard

使用javascript检测硬件键盘状态的最佳跨浏览器和跨平台方法是什么?

5 个答案:

答案 0 :(得分:6)

这可能是一个老问题,但几个月前,我一直在寻找解决方案。我正在构建一个消息传递系统,当有人在物理键盘上点击use strict; use Text::CSV; my $csv = Text::CSV->new ( { binary => 1 } ); open my $IN, "<:encoding(utf8)", "file.csv" or die; while (my $row = $csv->getline($IN)) { if (@$row > 5) { $csv->combine(@$row); print $csv->string(), "\n"; } } close $IN; 时会发送消息,但当某人在虚拟键盘上点击Return时会插入换行符。我解决它的方法是计算Returnkeydown事件之间的时间,并获得keyup被击中时的平均值。

我终于在我的博客here上记录了它。

答案 1 :(得分:3)

JS中的键盘可通过委托给OS API的浏览器API访问,但无法判断是否有物理键盘。我现在可以从物理键盘上剪下线,打开虚拟键盘,用鼠标点击屏幕按钮,浏览器仍然会触发脚本正在收听的每个键盘事件。从浏览器/ JS的角度来看,虚拟键盘与物理键盘无法区分。

“存在”甚至意味着什么?如果我有一个带触摸屏和滑出式键盘的手机,您是否希望浏览器触发某种“keboardIn”/“keyboardOut”事件?与电缆插入/拔出相同? :)

如果您的应用绝对需要物理键盘,请通知/询问用户。

编辑 - 在OP澄清之后:

  

你知道facebook聊天吗?您只需按下即可发送消息   “输入”,我必须向没有键盘按钮的用户显示   替换“回车”键。

所以只需创建一个带有文本输入的表单并听取输入/表单事件。大多数(每个?)软键盘都有某种“完成”,“就绪”或类似按钮。您不需要知道“keyCode”是否等于“13”,而是检测用户是否有意提交他键入的内容。或者,作为最后的手段,检测我启用触摸的设备然后显示按钮。 (if('ontouchstart' in document.documentElement)/* show touch sbmit button */

答案 2 :(得分:3)

你能尝试理论上的反面吗?而不是试图检测键盘硬件,为什么不尝试检测触摸屏?使用ontouchstart事件;

if ('ontouchstart' in document.documentElement) {
    // show icon
}

答案 3 :(得分:2)

使用键盘事件来检测用户是否有键盘(他/她可能会按下键盘)。将其保存在localStorage中,浏览器将在下次记住它。

var app = this;
app.hasKeyboard = false;
this.keyboardPress = function() {
    app.hasKeyboard = true;
    $(window).unbind("keyup", app.keyboardPress);
    localStorage.hasKeyboard = true;
    console.log("has keyboard!")
}
$(window).on("keyup", app.keyboardPress)
if(localStorage.hasKeyboard) {
    app.hasKeyboard = true;
    $(window).unbind("keyup", app.keyboardPress);
    console.log("has keyboard from localStorage")
}

答案 4 :(得分:-4)

if (confirm('Do you have hardware keyboard?')) {

} else {

}

根据问题评论中的说明进行编辑:

支持每次“输入”并为触摸屏添加“发送”图标(What's the best way to detect a 'touch screen' device using JavaScript?)和鼠标的“悬停”伪类怎么样?