HTML5; 在Javascript中检测物理键盘的存在

bri*_*out 8 javascript mobile html5 webkit web-applications

检测用户是否有物理键盘的最可靠方法是什么?

一个想法是,因为没有物理键盘window.onkeydown可以undefined(而不是null).但由于虚拟键盘,我认为情况并非如此.我没试过.

我的目标是有input[type='number']一个的在线计时器与轮采摘来代替,如果用户没有键盘.

Tim*_*ora 5

对于像 Microsoft Surface 这样配备键盘、鼠标和触摸屏的设备,这变得非常棘手。您可以在任何给定时间混合使用所有 3 种输入模式,或者添加另一种输入方法,例如手写笔。

微软正在采取将输入事件抽象为“指针事件”的方法。这个模型已经提交给W3C。这应该能让您了解管理输入的趋势。

尽管如此,我发现查看触摸是否可用并在假设(如果是)用户至少在某些时候会使用触摸输入的情况下操作是很方便的。这可能会导致设计决策消除完全不适合触摸的东西,即使这可能意味着损害鼠标/键盘功能。

在您的具体情况下,我会仔细考虑您是否需要替换input[type=number]为自定义控件。大多数触摸设备都相当现代,并且许多都有标准 HTML 输入的自定义、触摸友好版本。

还要记住本机控件可能很好地支持“开箱即用”的辅助功能场景。

如果您决定实现自定义控件,那么我建议检测触摸功能并显示您的自定义控件是否存在其他输入机制。这意味着确保自定义控件(至少)是触摸/键盘/鼠标友好的。

这是我当前的触摸测试(免责声明,它明天可能会中断,并且当然尚未在所有设备上进行测试):

var supportsTouch = ("ontouchstart" in window) || window.navigator.msMaxTouchPoints > 0;
Run Code Online (Sandbox Code Playgroud)


bri*_*out 4

我看到两种方法。

第一种方法是监听每个鼠标和键盘事件。拥有鼠标的用户可能还拥有键盘。访问网站的用户可能会移动鼠标。

第二种方法是检查用户代理以读取正在运行的操作系统,并假设 Android 和 iOS 设备没有任何键盘。对于 Windows 8,我不知道用户代理有何帮助,因为 Windows 8 可在平板电脑和台式机/笔记本电脑上运行。

不过,我宁愿有一个更优雅的解决方案。