代码之家  ›  专栏  ›  技术社区  ›  MidnightJava

在启用了about:config属性的情况下,firefox中的客户元素不工作

  •  1
  • MidnightJava  · 技术社区  · 6 年前

    CanIuse webcomponents v1在firefox v.61中启用 about:config 性质 dom.webcomponents.customelements.enabled dom.webcomponents.shadowdom.enabled 设置为真。网上的许多帖子和文章都同意这一点。

    所以我有了firefox版本61.0.2和前面提到的属性集,我有一个自定义元素定义如下。这在chrome中呈现如预期,但在firefox中,没有呈现任何内容,控制台上也没有错误。

    <template id="t">
       ...html content
    </template>
    
    <script>
        let template = document.currentScript.ownerDocument.querySelector('#t');
    
          class MyElement extends HTMLElement {
    
            constructor() {
              super();
              this.shadow = this.attachShadow({mode: 'open'});
              this.shadow.appendChild(template.content.cloneNode(true));
            }
          }
          customElements.define('my-element', MyElement);
    </script>
    

    如果这很重要,我尝试在一个单独的HTML文件中使用自定义元素,我已经将包含上述代码的文件导入到该文件中。

    我知道有一个polyfill我可以使用,但它在我的应用程序运行的环境中不可用。我一定遗漏了一些东西,因为我在网上看到的所有东西似乎都表明,Firefox应该能够按照我定义的方式呈现元素。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Supersharp    6 年前

    我正在尝试在一个单独的HTML文件中使用自定义元素,该文件是我导入的

    我想你应该用 HTML Imports 未在Firefox中实现的功能。

    因此,您需要使用polyfill来实现这一点: 文件html-imports.min.js 你可以在上面找到 polyfill github's repository .

    <script src="html-imports.min.js"></script>
    <link rel="import" href="your-custom-element.html">
    

    或者(如果不想使用HTML导入),将自定义元素的代码放入javascript文件中:

    class MyElement extends HTMLElement {
      constructor() {
        super();
        this.shadow = this.attachShadow({mode: 'open'});
        this.shadow.innerHTML = `...html content`;
      }
    }
    customElements.define('my-element', MyElement);