使用javascript检测键盘布局

新手上路,请多包涵

有什么方法可以使用 JavaScript 检测当前的键盘布局吗?我找到 了这个,但它只检测访问者是否使用英文布局。我需要知道作为字符串的确切布局,例如 de-chfren

原文由 Parzifal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 650
2 个回答

键盘布局没有标准化的标识符。它们具有布局创建者分配给它们的名称。他们可能将语言关联作为一个已定义的属性。

键盘布局不应与语言或区域设置标识符混淆。特别是没有单一的“英文布局”,而是有几十种可能用于英文的布局。

我认为系统通常不会通过 JavaScript 使其当前布局设置可读。

因此,无论您尝试通过检测键盘布局来解决什么问题,都需要一种不同的方法。

原文由 Jukka K. Korpela 发布,翻译遵循 CC BY-SA 3.0 许可协议

我知道这个问题很老了,但是对于那些被某些键映射到其他语言环境中的不同字符这一事实所困扰的人来说,这里有一种方法可以用来处理它。

最有可能的是,您将键盘事件处理程序绑定到 keyup 或 keydown 事件;在这种情况下,event.which 或 event.keyCode 属性的结果与用户按下的键相关联。例如,您用来键入“;”的同一键在 EN 版式中是用于在 RU 版式中键入“ж”的键,事件报告 186 作为它们两者的代码。

但是,如果您对按键产生的字符更感兴趣,则应该改用“按键”事件。此事件在 keydown/up 之后触发,它报告在 event.which 或 event.charCode 中键入的字符的实际 unicode 代码点,在上面的示例中是十进制 1078 或 U+0436。

因此,如果您不想猜测键盘布局并且不需要区分 keyup/keydown,那么 keypress 可能是您的一个可行选择。它并不完美(大多数浏览器不会始终如一地报告不打印字符的键的按键事件,例如修改键、功能键和导航键),但在处理可打印字符时,它比猜测键码要好。

原文由 Nathaniel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏