在JavaScript/jQuery中检测Ctrl+Tab键的按下

3

我有一个需求,需要限制用户查看我的网页。用户在完成页面上的任务之前不应该允许按下 Ctrl+Tab

有没有一种方式可以在javascript / jQuery中检测 Ctrl+Tab 的按键事件?


阅读此内容:https://dev59.com/y2w15IYBdhLWcg3wIoRM - Vucko
1
  1. 如果一个网页限制了你作为用户的权限,你会怎么想?
  2. 你认为浏览器供应商会允许网页以这种方式操纵浏览器吗?
  3. 自己回答你的问题。
  4. 去找你的老板/客户告诉他们这是不可能的,完全没有意义,而且是一个很大的安全问题。
- Christoph
1
@Christoph 不是安全性问题,而是可用性问题。 - GolezTrol
@Christoph:简而言之,能被使用的东西也可以被滥用。 - Andriy M
3个回答

7
此代码将检测CTRL+Tab:
$(document).keydown(function(e) {
    if (e.ctrlKey && e.which == 9) {
        alert("CTRL + TAB Pressed")
    }
})

请注意,CTRL+Tab功能由浏览器控制,您无法停止它。如果您打开了多个选项卡,此代码片段将演示它的功能:

示例代码


2
请注意,最近版本的Firefox或Chrome不支持此功能(确切地说是Firefox 68和Chrome 76,在Linux上进行了测试)。 当您按下Tab键并同时按住Ctrl键时,不会触发任何keydown事件。我想这是一种有意的安全措施,以防止巧妙的欺骗攻击? - Darren Cook
听起来很有可能。请注意,这是一个将近7年前的答案。我会进行调查,并更新结果。 - Rory McCrossan

1

不,你不能这样做。也就是说,你可以检测到按键,但无法阻止切换选项卡的行为。而且幸运的是,因为这样做的网站会让浏览变得非常痛苦。

这也会违背网络浏览器的初衷。如果你需要这样的限制,请不要建立一个网站,而是建立一个桌面应用程序。相反,如果你建立一个浏览器应用程序,请让它足够智能,能够保存其状态,以便用户可以在先切换到其他选项卡后返回任务并完成它。


限制用户无法进入另一个页面是典型的老式应用程序行为。如果您想在浏览器中构建应用程序,您必须解决用户拥有的某些自由问题。与其要求他们在转到另一个选项卡之前完成任务,不如让他们可以重新打开并稍后完成任务。此外,即使您可以捕获此按键(显然您至少可以检测到它),用户也有其他更改选项卡的方法。您不能或不应该像这样限制用户。 - GolezTrol

0
在你的处理程序中检查事件的ctrlKey属性。
$(document).on('keypress','*',function(e){alert(e.ctrlKey);})

http://jsfiddle.net/kDdzj/

你可以检测它,但你无法阻止它。


@RoryMcCrossan tab键只是一个普通的按键代码,您可以像检测其他按键一样,通过检查 keyCode 属性来检测它。 - Asad Saeeduddin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接