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

时间:2013-04-24 22:06:30

标签: javascript html5 web-applications mobile webkit

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

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

如果用户没有键盘,我的目标是让Online Timerinput[type='number']替换为取景器。

4 个答案:

答案 0 :(得分:4)

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

Microsoft正在采用将输入事件抽象为“指针事件”的方法。这个模型has been submitted to the W3C。这可以让您了解管理输入的趋势。

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

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

还要记住本机控件可能支持“开箱即用”的可访问性场景。

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

这是我目前的触摸测试(免责声明明天它可能会破坏,当然还没有在每台设备上测试过):

var supportsTouch = ("ontouchstart" in window) || window.navigator.msMaxTouchPoints > 0;

答案 1 :(得分:3)

我看到两种方法。

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

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

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

答案 2 :(得分:1)

检测触摸屏并显示特殊小部件更可靠;为了便于访问,请确保键盘仍可用于您的花哨小部件。

答案 3 :(得分:1)

您可以通过检查操作系统甚至屏幕尺寸来确定键盘类型。 Android,iOS和所有小屏幕设备都没有物理键盘。