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

如何使用javascript检测硬件键盘的存在?,javascript,keyboard,Javascript,Keyboard,使用javascript检测硬件键盘存在的最佳跨浏览器和跨平台方法是什么 if (confirm('Do you have hardware keyboard?')) { } else { } 根据问题注释中的说明进行编辑: 是否支持每次“输入”并仅为触摸屏添加“发送”图标(),并将其作为鼠标的“悬停”伪类?JS中的键盘可以通过浏览器API访问,这些API委托给操作系统API,无法判断是否有物理键盘。我现在可以切断物理键盘的电源线,打开虚拟键盘,用鼠标点击屏幕上的按钮,浏览器仍然会触发脚本

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

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

} else {

}
根据问题注释中的说明进行编辑:


是否支持每次“输入”并仅为触摸屏添加“发送”图标(),并将其作为鼠标的“悬停”伪类?

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

“在场”到底是什么意思?如果我有一部带有触摸屏和滑出键盘的手机,你认为浏览器会触发某种“keboardIn”/“keyboardOut”事件吗?与电缆插入/输出相同?:)

如果你的应用程序绝对需要物理键盘,只需通知/询问用户即可

编辑-OP澄清后:


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


因此,只需使用文本输入制作一个表单,并收听输入/表单事件。大多数(每个?)软键盘都有某种“完成”、“准备就绪”或类似的按钮。您不需要知道“keyCode”是否等于“13”,但需要检测用户是否有意提交他键入的内容。或者,作为最后手段,检测设备i touch enabled并显示按钮。(
如果document.documentElement中的('ontouchstart')/*显示触摸sbmit按钮*/

您能尝试理论上相反的方法吗?与其尝试检测键盘硬件,为什么不尝试检测触摸屏?使用
ontouchstart
事件

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

这可能是个老问题,但几个月前,我自己也在寻找解决方案。我正在构建一个消息传递系统,当有人在物理键盘上点击
Return
时,它会发送消息,但当有人在虚拟键盘上点击
Return
时,它会插入一个新行。我解决这个问题的方法是计算
keydown
keydup
事件之间的时间,并得到命中
Return
时的平均值


我终于开始在我的博客上记录它。

使用键盘事件来检测用户是否有键盘(他/她可能会按键盘)。将其保存在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")
}

您可以让用户按触摸屏键盘上不存在的键吗?就像任何使用
Ctrl
Alt
的东西一样?@millimoose。XY问题。你最终想要完成什么?为什么需要检测这个?给我们一点背景。你知道facebook聊天吗?你只需按“回车”键就可以发送消息,我必须向没有键盘按钮的用户显示,以替换“回车”键。一个好的设计是一致的,将按钮显示给每个人。为什么要假设人们知道[enter]呢?更多的做事方式通常意味着更高的生产率。您可以dbl单击windows标题栏将其最大化,也可以使用组合键、最大化图标、左上角的窗口菜单或任务栏上下文菜单等。没有人抱怨最大化的方法太多……但您能想象如果facebook的每个页面都问到“您有硬件键盘吗?”:DNo,但你可以只做一次,然后将它存储在cookie中。如果用户先从pc登录,然后再登录到手机,这会让人感到不舒服,甚至会将它保存到数据库中?这不是一个好的解决方案…是的,可能会让人不舒服,但我建议你学习一些关于HTTP cookies的知识,然后你就会知道每个浏览器都有cookies。谢谢你的笑声,伙计,如果一台PC有触摸屏,那么,如果一台iPad有键盘连接,你会怎么做?显示一个简单的图标似乎需要很多代码。许多黑莓设备都有触摸屏和物理键盘。我正在制作一个默认情况下使用键盘控制的游戏,但我想检测是否没有键盘,以便我可以在屏幕上进行控制。非常聪明,我最终在自己的应用程序中使用了这个解决方案。非常感谢。这是非常聪明的,它不会告诉你它是什么类型的键盘(硬件或虚拟)