影子根元素中的 Accesskey 在 Firefox 中不起作用

Accesskey in shadow-root element doesn't work in Firefox

在 shadow DOM 中的元素中使用 accesskey 不会在 Firefox 中触发。

我在 MacOS 上测试了 Chrome 和 Safari,它按预期工作。通过 keydownkeyup 事件侦听器手动映射键似乎很复杂,因为键映射因浏览器和操作系统而异。

是否有任何解决方法或其他解决方案?

我创建了简单的 fiddle:https://jsfiddle.net/jk3mrx98/

class CustomElement extends HTMLElement {
    constructor() {
    super();
    const shadowRoot = this.attachShadow({mode: 'open'});
        const customTextarea = document.createElement('textarea');
    customTextarea.accessKey = 'F';
    customTextarea.innerText = 'Accesskey F'
    shadowRoot.appendChild(customTextarea);
  }
}

window.customElements.define('custom-element', CustomElement);
<textarea accesskey="G">Accesskey G</textarea>
<custom-element></custom-element>

很可能是 Firefox 88 中的一个错误,在即将推出的 89 中已修复。

似乎 shadow root 中的 accesskey 从未在当前的 Firefox 稳定版本 (88) 中正确注册,并且 Alt+Shift+F 触发了那里的“文件”菜单。

但它似乎在即将发布的版本中得到修复:在 Windows 上尝试了 Firefox Developer 89.b5(Aurora 发布频道)中的 fiddle 并且两个访问键都按预期工作:Alt+Shift +G 聚焦“原生”文本区域,Alt+Shift+F 聚焦自定义元素中的文本区域。

无人接听。

只是展示了构造函数的另一种写法:

  • 可以super()调用之前编写JS代码,但是还没有'this'
  • 你可以在 super()
  • 上链
      constructor() {
        const customTextarea = document.createElement('textarea');
        customTextarea.accessKey = 'F';
        customTextarea.innerText = 'Accesskey F';

        super() // sets and returns this scope
          .attachShadow({mode: 'open'}) // sets and returns this.shadowRoot
          .append(customTextarea);
      }