具有阴影根的元素会破坏文本选择

时间:2019-10-10 07:54:11

标签: javascript html css firefox shadow-dom

在Firefox中,阴影根文本内容似乎无法像页面上的其他任何文本一样由用户选择。

演示:执行以下代码段,然后在结果框中按Ctrl +A。这是发生了什么:

enter image description here

let wShadow = document.querySelector('#with-shadow-root')

let p = document.createElement('p')
p.textContent = 'With shadow root'

wShadow.attachShadow({ mode: 'open' })
wShadow.shadowRoot.appendChild(p)
<div>
  Some text.
  <p id="with-shadow-root"></p>
  Some more text.
</div>

<div>
  Some text.
  <p>Without shadow root.</p>
  Some more text.
</div>

我也希望选择具有阴影根的文本片段。

如何在Firefox中使其工作?是否有一些CSS属性可以控制此行为?

奖金问题:Firefox是否按照规范在这里表现正常?还是一个错误? (我在Bugzilla中找不到与此有关的任何错误)。

我尝试将display设置为inline并将user-select CSS属性设置为无效。

在两种阴影模式下,自定义元素也会发生同样的情况:

class MyPOpen extends HTMLElement {
  constructor() {
    super();
    this.attachShadow({
      mode: 'open'
    });
    this.text = document.createTextNode('With open shadow root');
  }

  connectedCallback() {
    this.shadowRoot.appendChild(this.text);
  }
}

customElements.define('my-p-closed', MyPOpen);

class MyPClosed extends HTMLElement {
  constructor() {
    super();
    this.shadow = this.attachShadow({
      mode: 'closed'
    });
    this.text = document.createTextNode('With closed shadow root');
  }

  connectedCallback() {
    this.shadow.appendChild(this.text);
  }
}

customElements.define('my-p-open', MyPClosed);
my-p-open, my-p-closed { display: block; }
<div>
  Some text.
  <my-p-open></my-p-open>
  <my-p-closed></my-p-closed>
  Some more text.
</div>

<div>
  Some text.
  <p>Without shadow root.</p>
  Some more text.
</div>

1 个答案:

答案 0 :(得分:2)

针对该问题的发现的bug report I filed已作为this bug的副本被关闭。

关于第二个错误报告的最新评论对此有所启示:

  

问:现在要修复70,为时已晚,但是由于我们看到了一些重复的问题,您能否再看一遍,也许目标是修复72?还是这是更大项目的一部分?

     

A:在启用Shadow DOM时实施不同的选择处理是一项艰巨的任务,并且这项工作正在进行中。   (没有真正指定使用Shadow DOM进行选择处理)

所以要回答您的问题,从外观上看,与阴影DOM一起进行文本选择处理似乎是a)未指定领域,b)难以实现。

至少在关于Firefox中当前的处理方法不是他们想要的那样达成共识。