使用javascript检测键盘布局

使用javascript检测键盘布局,javascript,jquery,keyboard-layout,Javascript,Jquery,Keyboard Layout,有没有办法使用JavaScript检测当前的键盘布局?我发现,, 但它只检测访问者是否在英文版面上。我需要知道字符串的确切布局,例如,de ch,fr或en,您要查找的是如何检测其区域设置。在HTTP头文件中,这存储在头文件中,但浏览器不能通过纯JS使用 有一个名为“”的jQuery插件可以让您走上正确的道路 键盘布局没有标准化的标识符。布局创建者为它们指定了名称。它们可以将语言关联作为一个定义的属性 键盘布局不应与语言或区域设置标识符混淆。特别是,没有单一的“英语版面”,但有几十种可能用于英语

有没有办法使用JavaScript检测当前的键盘布局?我发现,,
但它只检测访问者是否在英文版面上。我需要知道字符串的确切布局,例如,
de ch
fr
en
,您要查找的是如何检测其区域设置。在HTTP头文件中,这存储在头文件中,但浏览器不能通过纯JS使用


有一个名为“”的jQuery插件可以让您走上正确的道路

键盘布局没有标准化的标识符。布局创建者为它们指定了名称。它们可以将语言关联作为一个定义的属性

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

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


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

我知道这个问题由来已久,但对于那些被某些键映射到其他地区的不同字符这一事实所困扰的人来说,这里有一种方法可以用来解决这个问题


最可能的情况是,您的键盘事件处理程序绑定到一个keypup或keypdown事件;在本例中,event.which或event.keyCode属性的结果与用户按下的键相关联。例如,键入“;”时使用的同一个键在EN布局中,是用于在RU布局中键入“ж”的键,事件报告186作为两者的代码

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


所以,如果您不想猜测键盘布局,也不需要区分键盘上下键,那么按键可能是一种可行的选择。它不是完美的(大多数浏览器不会一致地报告不打印字符的按键上的按键事件,如修改键、功能键和导航键),但在处理可打印字符时,它比猜测按键代码要好。

关于这个主题,我所知道的一切都已经实现了解决方案,是检测非英语布局键盘,即使用除英语以外的任何字母表的语言。解决方案是依靠正则表达式来匹配任何单词字符
\w
、任何数字字符
\d
和一系列预定义的英语键盘特殊字符,因此任何其他字符(如阿拉伯语、日语等)都不会匹配,所有这些都使用keydown事件,我使用这个解决方案来限制和通知登录表单中的用户名密码字段条目。我将其打包在如下函数中:

function checkKeyboard(ob,e){
        re = /\d|\w|[\.\$@\*\\\/\+\-\^\!\(\)\[\]\~\%\&\=\?\>\<\{\}\"\'\,\:\;\_]/g;
      a = e.key.match(re);
      if (a == null){
        alert('Error 2:\nNon English keyboard layout is detected!\nSet the keyboard layout to English and try to fill out the field again.');
        ob.val('');
        return false;
      }
      return true;
    } 
$("#textFieldId").keydown(function(e){
        if (!checkKeyboard($(this),e)){
            return false;
        }
    });
这是给不知名的下层选民的

注意:
在正则表达式模式中,
re
您可以添加任何缺少的特殊字符,如#、`、|等您可以使用event.code从任何布局中确定实际的键位置,试试它

您现在可以使用导航器界面返回的键盘对象。 此对象提供对检索键盘布局图和切换从物理键盘捕获按键的功能的访问


目前,此功能只是试验性的,仅在一些主要浏览器上使用。

接受语言、浏览器语言(这有几个含义)和键盘布局都是不同的。你最多可以从其他人那里猜出键盘语言,你经常会猜错。谢谢你的回答!这将适用于大多数访问者,但有些访问者的键盘布局与accept语言不同。例如,我的头是
Accept Language:de,en;q=0.7,在美国;q=0.3
尽管我的键盘设置为
de ch
(特殊字符不同于正常的
de
)。没有直接的方法得到布局吗?没有方法得到布局,你只能根据语言猜测。是的,如果是Querty vs.Divorak或者中国繁体vs.中国简体,你可能无法确定。经过再三考虑。。我意识到,也许可以检测到,但是。。会有斑点的。你基本上需要等待用户输入一些东西,然后检查关键代码。好的,非常感谢。也许我会让用户自己选择。或者您知道是否可以用Java来确定它吗?我想给一个带有参数的java小程序提供键盘布局,但也许我可以重写这个小程序。“事件报告186作为它们的代码。”我认为这是错误的。试试这把小提琴,试着在不同的键盘区域切换。我个人在一个英语-美国地区和一个法语地区得到的代码不同。@JackM我在同一把钥匙上得到的不同俄语和英语符号的钥匙代码相同。Chrome,Windows 8.1.@ITZYSCODE,因为它主要是为密码和用户名设计的。您可以通过添加将
\s
添加到模式中以包含空格。