标签: shadow-dom

将样式导入Web组件

将样式导入Web组件的规范方法是什么?

以下给出了一个错误HTML element <link> is ignored in shadow tree:

<template>
    <link rel="style" href="foo.css" />
    <h1>foo</h1>
</template>
Run Code Online (Sandbox Code Playgroud)

我使用以下方法使用shadow DOM插入它:

var importDoc, navBarProto;

importDoc = document.currentScript.ownerDocument;

navBarProto = Object.create(HTMLElement.prototype);
navBarProto.createdCallback = function() {
  var template, templateClone, shadow;

  template = importDoc.querySelector('template');
  templateClone = document.importNode(template.content, true);

  shadow = this.createShadowRoot();
  shadow.appendChild(templateClone);
};

document.registerElement('my-nav-bar', {
  prototype: navBarProto
});
Run Code Online (Sandbox Code Playgroud)

html5 web-component shadow-dom

8
推荐指数
3
解决办法
5002
查看次数

聚合物英雄过渡如何运作

首先,我很难理解Polymer中英雄转型的基本原理.我正在尝试构建一个类似于他们提供的示例中的英雄过渡卡,可以在此处找到.下面我已经制作了迷你卡,我只是想了解过渡以及较大的卡如何与较小的卡一起工作.

我的具体问题是,转换如何绑定到每个元素?在开始使用核心动画页面之前,我是否需要完成两者的CSS?嵌入式模板是否重要?

任何指导都会非常有帮助.

<script src="../components/webcomponentsjs/webcomponents.js"></script>
<link rel="import" href="../components/core-animated-pages/core-animated-pages.html">
<link rel="import" href="../components/core-animated-pages/transitions/hero-transition.html">
<link rel="import" href="../components/paper-button/paper-button.html">
<link rel="import" href="../components/core-image/core-image.html">
<link rel="import" href="../components/paper-shadow/paper-shadow.html">
<polymer-element name="chip-card">
    <template>
        <style>
            #page2 {
                width: 100%;
                height: 100%;
            }
            #paper_shadow {
                position: relative;
                display: inline-block;
                font-family:'Roboto', sans-serif;
                font-size: 12px;
                color: white;
            }
            #chip_body {
                height: 400px;
                width: 300px;
                background-color: aqua;
                color: black;
            }
            #chip_top {
                background-color: deeppink;
                background-image: url();
                background-size: cover;
                background-position: center center;
                width: 100%;
                position: relative;
            }
            #chip_bottom {
                background-color: #fbfbfb;
                width: 100%;
                height: …
Run Code Online (Sandbox Code Playgroud)

html css shadow-dom polymer

8
推荐指数
1
解决办法
755
查看次数

如何在不使用Shadow DOM的情况下创建组件?

我正在尝试创建一个没有Shadow DOM的组件.是的,我知道,Shadow DOM非常棒,而且是Web组件的主要关注点之一.但是,让我们说我希望组件的样式从父级继承.

使用Shadow DOM

<dom-module id="my-view1">
  <template>
    <div class="card">
      <div class="circle">1</div>
      <h1>View One</h1>
      <p>Ut labores minimum atomorum pro. Laudem tibique ut has.</p>
      <p>Lorem ipsum dolor sit amet, per in nusquam nominavi periculis, sit elit oportere ea.Lorem ipsum dolor sit amet, per in nusquam nominavi periculis, sit elit oportere ea.Cu mei vide viris gloriatur, at populo eripuit sit.</p>
    </div>
  </template>
  <script>
    class MyView1 extends Polymer.Element {
      static get is() { return 'my-view1'; }
    }
    window.customElements.define(MyView1.is, MyView1);
  </script>
</dom-module>
Run Code Online (Sandbox Code Playgroud)

我已应用Polymer组提供的说明,不使用Shadow DOM, …

javascript shadow-dom polymer polymer-2.x

8
推荐指数
2
解决办法
2669
查看次数

ShadyCSS polyfill无法在Edge中正确处理CSS

我正在为第三方网站构建一个小部件,使用影子DOM来防止其CSS干扰我们的CSS。我正在使用ShadyDOMShadyCSS polyfills使它在Edge和IE中工作,但是它并没有像我期望的那样为阴影DOM转换CSS。

例:

<!DOCTYPE html>
<html>
	<head>
		<title>Shadow DOM test</title>
	</head>
	<body>
		<div id="container">container is here</div>
		<script src="https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/2.3.0/webcomponents-bundle.js"></script>
		<script>
			const shadow = document.getElementById("container").attachShadow({ mode: "open" });
			const style = document.createElement("style");
			style.innerHTML = `
				:host .stuff {
					background: #ff00ff;
				}
			`;
			shadow.appendChild(style);
			const div = document.createElement("div");
			div.classList.add("stuff");
			div.innerHTML = "stuff inside shadow dom";
			shadow.appendChild(div);
		</script>
	</body>
</html>
Run Code Online (Sandbox Code Playgroud)

In Chrome (which supports shadow DOM natively), the stuff div has a pink background, as I would expect. But in …

javascript web-component polyfills shadow-dom shady-dom

8
推荐指数
1
解决办法
269
查看次数

JS自定义元素获取内部HTML

我们定义了这个自定义元素,如下所示......

<my-button>
   Submit
</my-button>
Run Code Online (Sandbox Code Playgroud)

和标准customElements定义

class MyButton extends HTMLElement{
   constructor(){
      super();
      // our custom code...
      this.innerHTML = ''; // ??? where did the 'Submit' go?
   }
}

...

customElements.define('my-button',MyButton);
Run Code Online (Sandbox Code Playgroud)

问题是,当尝试获取innerHTML时,我们知道我们可以做类似DOMContentLoaded或 的事情window.onload

但有时我们想使用代码动态创建“我的按钮”。并在附加时将其“渲染”...

有没有标准的方法来做到这一点?connectedcallback()它与其他“连接”功能有关系吗?

谢谢!

请注意 - 我已尝试使用connectedCallback()作为可能的解决方案,但这并不能解决问题。

html javascript web-component shadow-dom

7
推荐指数
1
解决办法
3193
查看次数

在 Shadow DOM 中创建单选按钮

当我们要使用Shadow Dom创建自定义单选按钮作为 Web 组件时,就会出现问题。

通常,当我们使用单选按钮时,我们通常会为分组的单选框赋予相同的名称,如下所示。

<input type="radio" name="size" id="small" value="small">
<input type="radio" name="size" id="large" value="large">
Run Code Online (Sandbox Code Playgroud)

但是如果我们定义一些自定义元素(比如 cus-radio) -> 我们会以一种方式将名称和 ID 作为输入(来自父元素)并将它们放在自定义元素中。这将完全适用于正常情况。

但我的问题是影子 dom!当我们在 shadow dom 内创建元素时,其中的属性是可访问的或与外部 dom(主 dom)连接。那么,如果它的 name 和 id 属性在父 dom 中不可访问或通用,我们如何开发自定义单选按钮?

例子:-

我们将像这样开发我们的自定义元素(像角度元素中的伪代码)

radio.html:-

<input type="radio" [name]="name" [id]="id" ...>
Run Code Online (Sandbox Code Playgroud)

TS/逻辑文件:-

...
component cus-radio {
@Input() name: string;
@Input() id: string;
...
Run Code Online (Sandbox Code Playgroud)

无论我们在哪里使用它:-

<cus-radio [id]="'small'" [name]="'size'" value="small">
<cus-radio [id]="'large'" [name]="'size'" value="large">
Run Code Online (Sandbox Code Playgroud)

预期的行为应该是(就像在正常 dom 中发生的那样),这两个无线电输入必须相互关联并存在于两个相互理解中,就像一个被检查了另一个必须取消检查等。但在 shadow dom 中它没有。因为那些 name 和 id 在没有引用父 dom(主 dom)的 shadow …

javascript web-component shadow-dom custom-element angular-elements

7
推荐指数
1
解决办法
989
查看次数

如何从文档中选择打开的 Shadow DOM 中的元素?

假设我的文档中有一个如下所示的 DOM:

<body>
  <div id="outer">
    <custom-web-component>
      #shadow-root (open)
        <div id="inner">Select Me</div>
    </custom-web-component>
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)

是否可以使用单个querySelector参数来选择影子根内的内部 div document?如果是的话,它是如何构建的?

例如,类似的东西document.querySelector('custom-web-component > #inner')

html css shadow-dom

7
推荐指数
2
解决办法
8770
查看次数

从 ShadowDOM 内部加载链接时,不会加载外部字体

首先我想说我知道这个问题类似于:

如何让导入的css字体/图标对shadow dom中的元素产生影响?

事实并非如此,也没有帮助。

问题:我最近决定使用 ShadowDOM 来封装我的项目中的样式。一开始我认为它按预期工作,但我注意到一些来自外部 CSS 文件的图标消失了。重要的是要注意,这些样式是外部的,并且进行更改的可能性是有限的。

我已经准备了代码来演示该问题(请参阅下面的代码片段)。

一切似乎都工作正常,除了 @font-face

正如您所看到的,包含带图标的外部 CSS 文件的 HTML 在 ShadowDOM 之外按预期工作。我也想在 ShadowDOM 中使用它。

我怎样才能做到这一点?

注意:如果您检查开发工具,网络选项卡中的 CSS 路径存在问题,但这是 SO 片段问题。如果您在本地运行该代码片段,则网络中一切正常。

const body = document.getElementsByTagName('body')[0];
const wrapper = document.querySelector('.wrapper')

const handleAddToShadowClick = (param) => {
  const host = document.querySelector('#shadowHost');
  if(param === 'insideShadow') {
    const shadowRoot = host.attachShadow({mode: 'open'});
     shadowRoot.innerHTML = firstComponent
  } else {
    const shadowRoot = host;
    wrapper !== null ? body.removeChild(wrapper): '' 
    shadowRoot.innerHTML = firstComponent
  }
}

const firstComponent = …
Run Code Online (Sandbox Code Playgroud)

javascript css font-face shadow-dom icon-fonts

7
推荐指数
1
解决办法
1648
查看次数

Shadow dom ::part 元素的样式子元素

我有一个 Web 组件,可以在 Shadow dom 中呈现以下内容:

<custom-banner>
  #shadow-root
    <div part="headertext">
      I am the header text!
    </div>
    ...
</custom-banner>
Run Code Online (Sandbox Code Playgroud)

要设置 的样式headertext,以下 css 效果很好:

custom-banner::part(headertext) {
  border: 5px solid green;
}
Run Code Online (Sandbox Code Playgroud)

现在说我有这样的东西:

<custom-banner>
  #shadow-root
    <div part="headertext">
      I am the header text!
      <span>I am the subheader text!</span>
    </div>
    ...
</custom-banner>
Run Code Online (Sandbox Code Playgroud)

有没有办法针对阴影部分的孩子?也就是说,像这样的东西(这似乎不起作用):

custom-banner::part(headertext) span {
  border: 5px solid red;
}
Run Code Online (Sandbox Code Playgroud)

我意识到这种事情可能会削弱 的整个目的::part,但也许不会?

需要明确的是,在此示例中,子标题范围不是槽子项。它始终是组件的一部分,并且位于Shadow dom 中。上面的示例是在浏览器中渲染的组件。

谢谢!

css web-component shadow-dom

7
推荐指数
1
解决办法
6401
查看次数

是否有针对 Web 部署的 Flutter 应用程序的测试框架?

我想为我的 Flutter部署的应用程序自动化并编写测试。

我可以使用 Appium 和 Codecept.js 在移动设备上测试 Flutter 应用程序的客户端,没有任何问题。(在VScode中构建测试项目并使用构建的APK)

我尝试过 Playwright、Puppeteer、WebDriver 和 Selenium,但在部署 Web 代码方面没有成功。穿透<flt-glass-pane/>是可能的,但超级混乱,而且似乎不是一个稳定的方法。我希望在负责 UI 测试的单独代码库中实现这一目标。

我想知道是否有人对从客户端(UI 和点击等)自动化 Flutter Web 应用程序有一些可靠的建议。

从我所做的研究来看,我还没有找到明确的解决方案。我对你之前使用过的方法非常感兴趣,或者你是否知道我应该走向的正确方向。

automated-tests webdriver shadow-dom flutter flutter-test

7
推荐指数
0
解决办法
1270
查看次数