【问题标题】:Disable Alt functions (shortcuts) in Google Chrome在 Google Chrome 中禁用 Alt 功能(快捷方式)
【发布时间】:2013-01-01 19:37:53
【问题描述】:

我使用以下代码(作为快捷方式)在我的反馈页面上重定向用户。

<a href='/feedback/' accesskey='f'>feedback</a>

但此代码在 Google Chrome 中不起作用,因为当用户按下 Alt + F 时,它将打开 Google Chrome 菜单栏。

如何禁用这些“快捷方式”?

可以是jQuery、javascript……

注意:我编写了一个重定向的 javascript 代码,但它首先打开 Chrome 菜单栏,然后​​执行它的工作。

【问题讨论】:

    标签: javascript jquery html google-chrome keyboard-shortcuts


    【解决方案1】:

    理论上允许这样做的浏览器会暴露一个安全漏洞。如果可以覆盖“系统”行为,则可以劫持用户浏览器。它将能够弹出一个模拟真实菜单的虚假“文件”菜单,让用户认为他们正在与自己的本地机器而不是网站进行交互。

    因此,在大多数现代浏览器中这是不可能的。

    【讨论】:

      【解决方案2】:

      有一些特殊的键是保留的,Alt+F 就是其中之一,但它确实会因浏览器和操作系统而异。这是good article

      【讨论】:

        【解决方案3】:

        在 Google Chrome(在 V44 中测试)中,访问accesskey 键盘快捷键的修饰键是 Alt

        但是,如果键与浏览器快捷方式冲突,则使用 AltShift 访问它。因此,您发布的解决方案有效,但仅使用 AltShift

        例子:

        • 使用 AltShift+f 访问第一个链接(与菜单快捷方式冲突)
        • 第二个链接使用Alt+a(无冲突)访问

        <h1>Links with accesskey attribute</h1>
        
        <a href='http://www.example.org/' accesskey='f'>
        Link to www.example.org (accesskey: f)
        </a>
        <p/>
        <a href='http://apache.org/' accesskey='a'>
        Link to apache.org (accesskey: a)
        </a>

        顺便说一句,我更喜欢 Firefox 使用的解决方案,即始终使用 AltShift 作为这些快捷方式。这对用户来说比 Chrome 的行为更一致(尽管 Chome 开发者可能有他们的原因)。


        注意:以上内容在 Windows 和 Linux 上有效。 AFAIK,Mac OS X 上的 Chrome 使用不同的快捷方式。

        【讨论】:

        • 哇哦。我从来没有意识到 Alt+Shift+(key) 不是 访问键的主要方法。因为在Wikipedia 上,他们用 [alt-shift-(key)] 标记所有访问密钥,无论是否存在潜在冲突。
        • Alt+Shift+F 在适用于 Linux 的 Chrome、Ubuntu 18.04.1 LTS 中无法正常工作。并且没有解决方案。
        • @WoodrowShigeru:奇怪。我刚刚在 Debian 上使用 Chrome 65 进行了测试,在上面的测试用例中 Alt+Shift+F 确实对我有用。
        • 我有 Chrome 71,这个测试用例不起作用。也许这是 Google 开发人员添加的错误。
        • @WoodrowShigeru:刚刚用 Chrome 71 重新测试 - 仍然适用于我。但请注意,键盘焦点处理似乎存在一些问题。我必须点击进入示例页面,例如在标题上,以便快捷键起作用。此外,如果您使用 Alt-F 触发菜单,则需要再次单击以更正键盘焦点。也许这就是导致您的问题的原因?如果没有,请随时提出新问题 :-)。
        【解决方案4】:

        正如其他人所说,这可能不是一个好主意。

        但如果你是一个疯子,并且喜欢做你想做的事,那么这实际上会奏效:

        document.addEventListener('keydown', (e) => {
          e.preventDefault();
          if (e.altKey) {
            console.log('yay');
          }
        })
        

        e.preventDefault() 需要放在事件处理程序的顶部。这可以防止浏览器的默认行为(即打开菜单)。

        【讨论】:

          【解决方案5】:

          我刚刚找到了一种在用户按下 Alt + 其他按钮 时禁用浏览器功能的方法。 Javascript可以通过在函数末尾写return false来禁用这个快捷键

          例子

          function function1(){/* code goes here */; return false}
          

          【讨论】:

          • 你能举个例子吗
          • 对不起,看不出这是一个答案。
          猜你喜欢
          • 2011-08-03
          • 2013-07-05
          • 2011-01-17
          • 1970-01-01
          • 1970-01-01
          • 2016-11-21
          • 2021-06-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多