shadow-dom 相关问题

Shadow DOM是Web Components的关键部分,它允许您使用与主DOM隔离的DOM元素子树创建基于组件的应用程序。

使用 Bootstrap 设置自定义元素 ShadowDOM 样式不起作用

我尝试使用shadowDom及其样式(即bootsrap)创建自定义元素导航栏。我使用 NPM 安装了引导程序。然后我在 style.scss 中导入了 bootstrap 并获取了导航栏

回答 1 投票 0

我如何获得#shadow-root(用户代理)Cypress JS

如果有什么办法我可以到达#shadow-root(用户代理)元素??? 您好,我需要更改 div 中的值,我尝试更改输入,但它对我没有帮助

回答 2 投票 0

避免 React 中的全局样式

我需要在我的应用程序中显示电子邮件预览。该消息是一段 HTML,我这样做: // 一些代码... 我需要在我的应用程序中显示电子邮件预览。该消息是一段 HTML,我这样做: // some code... <div className="w-4/5 rounded-lg p-2 bg-white mx-auto overflow-y-auto" dangerouslySetInnerHTML={{ __html: messagePreview }} /> // some code... 在这种情况下,它工作得很好,但是一些顺风默认值会影响消息,并且它看起来并不像实际情况那样。 需要一些帮助:) 如果您遇到 Tailwind CSS 样式问题影响 HTML 电子邮件预览的外观,您可以将预览与 Tailwind 样式隔离开来,方法是将其封装在具有实用程序类的容器中,该实用程序类可重置或中和 Tailwind 样式。 具体操作方法如下: jsx: // some code... <div className="w-4/5 rounded-lg p-2 bg-white mx-auto overflow-y-auto"> <div className="email-preview" dangerouslySetInnerHTML={{ __html: messagePreview }} /> </div> // some code... 然后,在 CSS 中或直接在 JSX 中(如果您使用的是 CSS-in-JS 解决方案,例如 styled-components),您可以重置或中和任何影响电子邮件预览的 Tailwind 样式: CSS: .email-preview { /* Resetting or neutralizing Tailwind styles */ margin: 0; padding: 0; border: none; /* Add any additional styles you need for your email preview */ } 通过将电子邮件预览封装在单独的容器中并向其应用自定义样式,您可以防止 Tailwind 的默认样式影响 HTML 电子邮件预览的外观。根据需要调整自定义样式,以获得电子邮件预览所需的外观。

回答 1 投票 0

找不到 CSS 选择器来设置 Shadow DOM 委托焦点的样式

编辑1+ 好吧,抱歉,徒劳无功。这似乎是一个直接的 CSS 问题。在光 DOM 中:- #disTick::部分(内藤){ 盒子阴影:插入 0px 1px 1px rgba(0,0,0,0.5), 0px 1px 0p...

回答 1 投票 0

打开在我的 chrome 扩展程序之外创建的“封闭”shadowRoot

chrome 中的谷歌翻译扩展,具有弹出功能,它立即显示所选单词的翻译,我想访问弹出窗口显示的那些翻译,但这个弹出元素是

回答 1 投票 0

事件监听器中何时不会调用回调?

我写了以下代码: 设置超时(()=> { document.body.innerHTML = "<div></div>"; 让outerHost = document.querySelectorAll("div")[0]; 外部主机。</desc> <question vote="1"> <p>我写了以下代码:</p> <p></p><div data-babel="false" data-lang="js" data-hide="false" data-console="true"> <div> <pre><code>&lt;script&gt; setTimeout(() =&gt; { document.body.innerHTML = &#34;&lt;div&gt;&lt;/div&gt;&#34;; let outerHost = document.querySelectorAll(&#34;div&#34;)[0]; outerHost.attachShadow({mode: &#34;open&#34;}); outerHost.shadowRoot.innerHTML = &#34;&lt;style&gt;div {width: 100px; height: 100px; background-color: red}&lt;/style&gt;&lt;div&gt;&lt;/div&gt;&lt;div id=&#39;host-shadow&#39;&gt;&lt;/div&gt;&#34;; let target = outerHost.shadowRoot.childNodes[2]; target.attachShadow({mode: &#34;open&#34;}); target.shadowRoot.innerHTML = &#34;&lt;div id=&#39;node-text&#39; style=&#39;background-color: green&#39;&gt;Hello&lt;/div&gt;&#34;; let relatedTarget = target.shadowRoot.childNodes[0]; let ev = new Event(&#34;mouseover&#34;); ev.relatedTarget = relatedTarget; target.addEventListener(&#34;mouseover&#34;, (e) =&gt; console.log(e.target, e.relatedTarget)); target.dispatchEvent(ev); }); &lt;/script&gt;</code></pre> </div> </div> <p></p> <p>它创建两个影子根并指定事件监听器<pre><code>id=&#34;host-shadow&#34;</code></pre>。<pre> </pre>如果我将光标放在 </p><code>mouseover</code><p> 上,然后将其移动到 <pre><code>id=&#34;node-text&#34;</code></pre>,我将不会调用事件侦听器的回调。但是如果我通过合成方法执行此操作,我会得到回调调用。我被困住了!<pre> </pre>查看</p>规格<p>:<a href="https://dom.spec.whatwg.org/#concept-event-dispatch" rel="nofollow noreferrer"> </a> </p>如果目标不是相关目标或目标是事件的相关目标,则:<blockquote> <p> </p>如果这个条件通过检查,那么你就会得到回调调用,否则你不会。</blockquote> <p>我可以比较非合成调用和合成,它们的调用没有通过检查。为什么合成调用会传递并调用回调?</p> <p></p>我的问题:<p>我上面指定的这个条件实际上是什么?<strong> </strong> </p> </question>您似乎假设可以通过在实例对象上设置具有该名称的属性来设置 <answer tick="false" vote="0"><code>id=&#34;host-shadow&#34;</code><p> 的 <pre><code>Event</code></pre> 。事实并非如此。您引用的规范中的 <pre><code>relatedTarget</code></pre> 是实例的内部属性,它不会暴露给 JS。目前它在规范中的名称是这样的,但明天可能会更改为另一个名称,而不会产生任何后果,因为它没有公开。<pre> </pre>要使属性产生影响,需要将其公开为接口上的设置器。目前 </p><p><code>relatedTarget</code><a href="https://dom.spec.whatwg.org/#event" rel="nofollow noreferrer"> 接口<pre> 仅将 </pre><code>Event</code></a> 和 <pre><code>cancelBubble</code></pre> 属性公开为可设置。所有其他属性都是<pre>readonly</pre>。你可以通过构造函数调用设置更多一些属性,如<em><code>returnValue</code></em>、<pre><code>.type</code></pre>、<pre><code>.bubbles</code></pre>和<pre><code>.cancelable</code></pre>,对<pre><code>.composed</code></pre>的调用将确定<pre><code>dispatchEvent()</code></pre>和<pre><code>.target</code></pre>其中之一,但是<pre><code>.timestamp</code> </pre> 根本不属于此列表,您无法对其进行设置。<pre> </pre>现在,</p><p><code>relatedTarget</code><a href="https://w3c.github.io/uievents/#dom-mouseevent-relatedtarget" rel="nofollow noreferrer">接口<pre>确实通过</pre>readonly</a><pre><code>MouseEvent</code></pre>属性暴露了其内部<em><code>relatedTarget</code></em>,并且它允许通过<pre>MouseEventInit字典</pre>的同名属性来设置它。所以对于<a href="https://w3c.github.io/uievents/#idl-mouseeventinit" rel="nofollow noreferrer"><code>.relatedTarget</code></a>,你实际上可以设置它。<pre> </pre>将其设置为您尝试执行的操作,回调将不会被调用,因为“</p>retargeting<p>事件的<a href="https://dom.spec.whatwg.org/#retarget" rel="nofollow noreferrer"><code>MosueEvent</code></a>针对<pre><code>relatedTarget</code></pre>的结果”将是<pre><code>target</code></pre>(我们击中了算法中的第三个子弹,因此直接返回<pre><code>target</code></pre>,即<pre><code>A</code></pre>),但事件的<pre><code>target</code></pre>(我们设置的)不是<pre><code>relatedTarget</code></pre>。<pre> </pre></p><p> </p> <div data-babel="false" data-lang="js" data-hide="false" data-console="true"><code>target</code><div> <pre> </pre> </div></div> <p> </p></answer>

回答 0 投票 0

在shadow dom中渲染Google ReCaptcha

我们在渲染验证码时遇到一个错误: 未捕获的 DOMException:阻止源为“https://www.google.com”的框架访问跨源框架。 看来问题是 ReCaptcha 是......

回答 1 投票 0

如何使用 cypress 测试 vaadin-combo-box?

我尝试在 cypress vaadin-combo-box 中进行测试。我有两个值:是/否。默认值为“否”。 在测试中我想更改为“是” 我柏树我写道: cy.get('#addressDetails input').should('be.visible').clea...

回答 1 投票 0

微前端架构中的风格隔离

我有一个案例。我需要使用 Webpack Module Federation 插件将一个 Vue js 应用程序集成到另一个应用程序中。使用配置,我能够将组件分发到另一个应用程序(...

回答 1 投票 0

如何使用Python访问嵌套的shadow DOM元素?

因此,我想通过 selenium Python 单击一个下载按钮,但它位于多个嵌套的 Shadow-dom 内。 在这里添加该 html dom 的屏幕截图 HTML DOM 屏幕截图 我想...

回答 1 投票 0

为什么我的 vuetify 应用程序在将其转换为 Web 组件时会失去样式?

我正在尝试使用 vuetify 构建一个 Web 组件。然而,当我将该 Web 组件嵌入到容器中时,shadow-dom 就会失去其样式,结果只是一堆暗灰色的按钮。 我已经

回答 2 投票 0

如何在JS中创建带有引导下拉菜单的shadowDOM

我正在创建一个 chrome 扩展,我需要将 bootstrap 提供的分割按钮添加为 ShadowDOM。但我找不到任何明确的文档。有人可以告诉我如何创建...

回答 1 投票 0

我想等到 Shadow DOM 元素加载完毕

我正在开发一个 Chrome 扩展程序。 我想开发一个功能,当您将鼠标悬停在页面上的某个元素时,该元素周围会出现一个框架,但它不适用于 Shadow DOM 元素...

回答 1 投票 0

Tampermonkey 脚本看不到由 ajax 加载的影子根(打开)元素

我正在尝试在 Chrome 中为我在工作中一直使用的网站编写 Tampermonkey 脚本。我希望脚本删除某个类或标题的按钮上的禁用属性。这个

回答 1 投票 0

选择影子根中的元素

我想更改隐藏在影子根中的元素的属性。由于项目的性质,我无法直接引用 JS 中的文档,我只能使用自定义类(这不适用于 shado...

回答 2 投票 0

编辑伪类“:host”的属性

在 Angular 应用程序中,我想编辑应用于组件“p-table-row”的伪类“:host”的属性“border-top”,该组件是来自 po...

回答 1 投票 0

如何在不使用attachShadow的情况下创建自定义元素?

假设我有一些这样的代码: 类 MyElem 扩展 HTMLElement { 构造函数(){ 极好的(); 让 templateContent = document.getElementById('template-elem').content; 这个。

回答 2 投票 0

当返回参数[0].shadowRoot 似乎不可行时,在 python selenium 的影子 DOM 中查找元素

我试图在 python selenium 会话中单击接受 cookies 按钮,但它位于影子 DOM 内。这是我的代码的概要: # Python 版本 3.10.9 # 硒版本 3.141.0 来自选择...

回答 1 投票 0

如何告诉 CSS 我的 Web 组件属性已发生变化

如果您看我这里的简单示例,您会发现 test_button.html 有一些内联 CSS:- #myBtn[点击=“true”] { 不透明度:0.5; } 只要我经历过这似乎就有效

回答 1 投票 0

如何从影子根中选择元素标签

我试图从影子根中选择一个标签,但不起作用。那么,如何从嵌套的影子根元素中选择特定标签? #shadow-root(打开) #shadow-root(打开) 我试图从影子根中选择一个标签,但不起作用。那么,如何从嵌套的影子根元素中选择特定标签? #shadow-root(open) <start> #shadow-root(open) <plural> #shadow-root(open) <main> #shadow-root(open) <content> <p>..text..</p> </content> </main> </plural> </starts> 打字稿: let inside = this.shadowRoot.querySelector('content').innerHTML; console.log(inside); 要从嵌套影子根中选择元素,您可以使用 querySelector().shadowRoot 方法来访问每个影子根级别: // Assuming you have the parent element that contains the shadow root const parentElement = document.querySelector('#start'); // Access the first shadow root const firstShadowRoot = parentElement.shadowRoot; // Access the second shadow root const secondShadowRoot = firstShadowRoot.querySelector('plural').shadowRoot; // Access the third shadow root const thirdShadowRoot = secondShadowRoot.querySelector('main').shadowRoot; // Get the paragraph inside the third shadow root const p = thirdShadowRoot.querySelector('p'); console.log(p.textContent); 请注意:您无法跳过影子 DOM 级别,因此请确保从 DOM 顶部开始跟踪每个级别。 另一个可能有帮助的提示: 当处理涉及许多嵌套 Shadow DOM 的复杂 DOM 时 找到元素路径的最佳方法是使用开发工具:right click on the element > Copy > Copy js path(Chrome 示例) 对于未知级别的shadowRoot,您需要“遍历 DOM”并潜入到 ShadowRoots: <my-component> #shadow-root(open) <my-component> #shadow-root(open) <my-component> #shadow-root(open) <content> <p>..text..</p> </content> </my-component> </my-component> </my-component> <script> customElements.define("my-component", class extends HTMLElement { constructor() { super().attachShadow({mode:"open"}).innerHTML = `<slot></slot>`; } }) const shadowDive = ( el, selector, match = (el, root) => { console.warn('match', el, root); }, root = el.shadowRoot || el ) => { root.querySelector(selector) && match(root.querySelector(selector), root); [...root.querySelectorAll("*")].map(el => shadowDive(el, selector, match)); } shadowDive(document.body, "content"); // note optional parameters </script>

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.