无法在已托管影子树的主机上创建影子根

发布于 2025-01-10 15:55:13 字数 584 浏览 0 评论 0原文

我正在 Shadow DOM 中渲染一个 React 应用程序(Widget)。所以我查看了当前加载小部件的 div id。

请参阅下面的屏幕显示。 输入图像描述这里

有了这些信息,我想像这样创建Shadow主机。


const host = document.querySelector('#widget-_hw');
const shadow = host.attachShadow({ mode: 'open' });
const renderIn = document.createElement('div');

但我收到这个错误。

Failed to execute 'attachShadow' on 'Element': Shadow root cannot be created on a host which already hosts a shadow tree

I'm rendering a react app(Widget) inside Shadow DOM. So I looked at the div id where the widget is getting loaded currently.

See screenshow below. enter image description here

With this information, I want to create Shadow host like this.


const host = document.querySelector('#widget-_hw');
const shadow = host.attachShadow({ mode: 'open' });
const renderIn = document.createElement('div');

But I'm getting this error.

Failed to execute 'attachShadow' on 'Element': Shadow root cannot be created on a host which already hosts a shadow tree

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

£噩梦荏苒 2025-01-17 15:55:13

这对我有用。

const hostRef = useRef<HTMLDivElement | null>(null);

if (hostRef.current) {
   // const shadowRoot = hostRef.current.attachShadow({ mode: 'open' });
   const shadowRoot = hostRef.current.shadowRoot || hostRef.current.attachShadow({ mode: 'open' });
}

This one worked for me.

const hostRef = useRef<HTMLDivElement | null>(null);

if (hostRef.current) {
   // const shadowRoot = hostRef.current.attachShadow({ mode: 'open' });
   const shadowRoot = hostRef.current.shadowRoot || hostRef.current.attachShadow({ mode: 'open' });
}
走走停停 2025-01-17 15:55:13

它表示您无法将影子文档附加到此元素,因为它已经附加了一个文档。

在您的代码中设置一个断点并检查它是否不会被调用两次。

或者,检查 shadowRoot 属性。

const shadow = host.shadowRoot || host.attachShadow({ mode: 'open' });

It's saying you can't attach a shadow document to this element because it already has a document attached.

In your code set a breakpoint and check that it's not getting call twice.

Alternatively, check the shadowRoot property.

const shadow = host.shadowRoot || host.attachShadow({ mode: 'open' });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文