有没有办法检测 IE10 的“Caps Lock 已开启”功能?

Posted

技术标签:

【中文标题】有没有办法检测 IE10 的“Caps Lock 已开启”功能?【英文标题】:Is there a way how to detect IE10's "Caps Lock is on" feature? 【发布时间】:2011-10-25 03:24:43 【问题描述】:

您可能知道,有一种相对简单的方法可以或多或少可靠地输入detect whether Caps Lock is on,尤其是当用户开始输入密码字段时。然而,IE10 自动支持此功能,无需任何额外编码(source、direct link to screenshot 和a simple demo),这是一个非常未知的事实。因此,现在我面临一个问题,因为如果我添加类似的 javascript 功能,IE10 用户将看到两个带有警告的“气泡”,一个由我的脚本创建,一个由他们的浏览器创建;这可能看起来很难看,甚至令人困惑。这就是为什么我正在寻找一种解决方案来检测浏览器是否内置了此功能;我希望它会触发一些事件或更改一些属性,但我还没有找到这样的东西。

我可能只是在用户代理字符串中寻找Trident/6.0,但我宁愿避免浏览器检测;如果其他浏览器添加类似的功能,它可能还需要一些代码维护。

如果没有可靠的解决方案,我会要求 IE 团队添加“caps-lock-is-on feature”检测能力,并且可能还会要求 html 规范的编辑者要求供应商这样做。

【问题讨论】:

没有公开此默认行为的标准。所以没有办法进行功能测试,所以用户代理匹配是唯一的方法。或者您可以尝试将您的气泡定位在默认气泡下方(假设浏览器气泡始终在顶部),因此它被阻止并且不“可见” @Gerben 感谢您的评论。您的摘要似乎很好地描述了当前状态和可能的解决方案,请随时添加您的回复作为答案;如果没有出现任何神奇的解决方案,我可能会将其设置为已接受。 在包含表单上设置novalidate 属性对气球行为有任何影响吗?该文档似乎表明这会禁用内置的验证功能 - 尽管目前尚不清楚这是提交表单时还是抑制对元素的内联检查...... 【参考方案1】:

您可以捕获键盘事件并检测按键,但您无法确定大写锁定状态。

【讨论】:

感谢您有兴趣回答这个问题。但是,您似乎误解了这个问题;请仔细阅读。我对检测大写锁定没有任何问题,我正在寻找一种方法来确定是向用户显示警告还是浏览器自行执行。【参考方案2】:

我建议您查看本教程 http://www.upsdell.com/BrowserNews/res_sniff.htm

你可以试试这样的

<!--[if gte IE 10]>
    <script type="text/javascript">
        var isTrulyIE = true;
    </script>
<![endif]-->

或用于检测浏览器版本和原型设计的 javascript 版本

 this.isIE10 = (this.version == "10.0") || (this.ua.indexOf("trident/6") != -1);

你也可以试试微软定义的脚本来决定IE浏览器的版本 http://support.microsoft.com/kb/167820

【讨论】:

听说 IE10 不再支持条件 cmets? 那我建议你试试 trident/6 的 javascript,就像他们在这里的表现一样 support.microsoft.com/kb/167820【参考方案3】:

您可以通过检查document 本身的msCapsLockWarningOff 属性的值来确定IE 是否会显示自己的大写锁定警告。此外,您可以打开和关闭此功能:

document.msCapsLockWarningOff = true;

小提琴:http://jsfiddle.net/jonathansampson/mqcHA/1/ MSDN:msCapsLockWarningOff property

【讨论】:

太好了,我希望微软会添加这样的属性。

以上是关于有没有办法检测 IE10 的“Caps Lock 已开启”功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 在页面加载时(即,不在按键时)检测 Caps Lock 状态?

TestCafe:TypeText 函数似乎对大写字母使用 CAPS LOCK。有没有办法告诉它使用 SHIFT 代替?

是否可以通过编程方式禁用 Windows 上的 Caps Lock 键?

如何在VIM中映射CAPS LOCK键?

如何在 VIM 中映射 CAPS LOCK 键?

我如何知道在 Dev-C++ 中 Caps Lock 是不是打开?