【问题标题】:HTML5; detect presence of physical keyboard in JavascriptHTML5;在Javascript中检测物理键盘的存在
【发布时间】:2013-04-18 15:46:03
【问题描述】:

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

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

如果用户没有键盘,我的目标是让Online Timer 中的input[type='number'] 替换为轮式选择器。

【问题讨论】:

  • @Shmiddty JavaScript 可能会检测到屏幕阅读器的存在,这意味着有视力障碍的用户。

标签: javascript html web-applications mobile webkit


【解决方案1】:

这对于带有键盘、鼠标和触摸屏的 Microsoft Surface 等设备来说非常棘手。您可以在任何给定时间混合所有 3 种输入模式,或添加其他输入法,如手写笔。

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

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    我看到了两种方法。

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

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

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

    【讨论】:

    • 想象一下连接了蓝牙键盘的 Android 平板电脑... 探测关键事件似乎是迄今为止唯一可行的解​​决方法。记录keydownkeyup微次并计算它们的差异。如果出现波动,则很可能正在使用物理键盘。
    【解决方案3】:

    检测触摸屏并显示特殊小部件更可靠;只需确保键盘仍然可以与您的精美小部件一起使用,以实现可访问性。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2017-01-22
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        • 2020-03-30
        • 1970-01-01
        • 1970-01-01
        • 2011-05-13
        相关资源
        最近更新 更多