【问题标题】:Accesskey in shadow-root element doesn't work in Firefoxshadow-root 元素中的 Accesskey 在 Firefox 中不起作用
【发布时间】:2021-07-21 12:40:03
【问题描述】:

在影子 DOM 中的元素内使用 accesskey 不会在 Firefox 中触发。

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

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

我创建了简单的小提琴: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>

【问题讨论】:

    标签: javascript firefox shadow-dom custom-element access-keys


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。我测试了 89.0a1,它似乎可以工作。
    【解决方案2】:

    没有回答。

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

    • 可以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);
          }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-27
      • 2020-09-11
      • 1970-01-01
      • 2020-11-26
      • 2020-02-29
      • 2021-06-09
      • 2018-05-11
      • 2019-06-26
      相关资源
      最近更新 更多