在Firefox中更改accesskey修饰键

bob*_*rti 9 html javascript firefox keyboard-shortcuts menubar

我正在一个网站上工作,每个页面都有按钮,如"提交"和"取消".每个按钮都有一个accesskey属性.提交按钮的accesskey属性设置为S,取消按钮的accesskey属性设置为C.

使用不同浏览器中的不同修饰符激活访问键.Internet Explorer,Safari和Google Chrome仅使用alt,而Firefox则同时使用alt和shift键.同样,Firefox使用alt+ s打开历史记录菜单.

此问题的答案不应建议更改浏览器配置中的设置,因为这在生产站点上是不可行的.

我如何将Firefox用于修改的修改键accesskey改为公正alt,并阻止历史菜单打开?

我在Ubuntu 16.04工作.

小智 6

你不能 - 据我所知 - 更改激活a所需的组合键accesskey,但你想要实现的不需要使用accesskey属性.您可以直接收听keydown事件.

向文档添加keydown事件侦听器.在处理程序功能中检查是否按下了alt和s键.如果它们是 - 并且没有按下其他修改键 - 阻止事件的默认操作,则在提交按钮上触发单击事件.触发提交按钮上的单击事件将依次触发提交事件侦听器,同时触发直接在表格上提交活动可能不会.

const submit = document.querySelector('#submit')

document.addEventListener('keydown', e => {
  // If the only modifier key is the alt key, and the s key is pressed
  if(!e.metaKey && !e.ctrlKey && !e.shiftKey && e.altKey && e.key === 's') {
    e.preventDefault()  // Prevent the mozilla history menu from opening
    submit.click()      // Trigger the form submission
  }
})
Run Code Online (Sandbox Code Playgroud)
<form action=""><button type="submit" id="submit"><u>S</u>ubmit</button></form>
Run Code Online (Sandbox Code Playgroud)

注意:
1.虽然这适用于当前稳定版本的Firefox,但我没有测试过其他版本
2.本示例使用2015版ECMAScript语言规范中引入的语言功能.这些功能不是实现所需效果所必需的,但使代码更易于阅读.如果您需要支持旧的浏览器,就可以使用var,而不是const,和一个标准的函数,而不是脂肪箭头功能.
3.不幸的是,由于沙箱,堆栈溢出的片段功能对于这个例子不工作,请参阅本上JSBin例子,而不是


小智 3

如果您想深入了解它,请尝试这篇文章,了解更多信息: http: //kb.mozillazine.org/Ui.key.contentAccess

如果您发现无法习惯“选项卡内”首选项对话框,可以选择返回旧样式对话框:

  1. 在新选项卡中,在地址栏中键入或粘贴 about:config,然后按 Enter。单击承诺要小心的按钮。

  2. 在列表上方的搜索框中,键入或粘贴首选项,然后在过滤列表时暂停

  3. 双击 browser.preferences.inContent 首选项将其从 true 切换为 false

注意:我不知道这是否会永远存在于 Firefox 中还是一个过渡功能。