如何在Firefox中使自定义元素生效?

8
我有一个基本的自定义元素示例。它在Chrome中可以工作,但在Firefox中无法工作。是否有一种方法可以让它在Firefox中工作(不需要使用Polymer,但可能需要某种Polyfill)?
我还启用了dom.webcomponents.enabled标志,但没有成功。

更新:

问题已解决,我创建了一个存储库,包含完整的代码: https://github.com/peplow/webcomponent-example/


自定义元素的 HTML 文件:

<template id="template">
  <button id="button">Hallo</button>
  <style media="screen">
    button{
      color:red;
    }
  </style>
</template>

<script>
    var localDoc = document.currentScript.ownerDocument;
    class toggleButton extends HTMLElement{

      constructor(){
        super();
        this.shadow = this.attachShadow({mode: 'open'});
        var template = localDoc.querySelector('#template');
        this.shadow.appendChild(template.content.cloneNode(true));

        this.shadow.querySelector('button').onclick = function(){
          alert("Hello World");
        }
      }

      static get observedAttributes() {return ['name']; }

      attributeChangedCallback(attr, oldValue, newValue) {
        if (attr == 'name') {
          this.shadow.querySelector('#button').innerHTML = newValue;
        }
      }

    }

    customElements.define('x-toggle', toggleButton);
</script>

使用该文件的位置:

<!DOCTYPE html>
<html>
  <head>
    <link rel="import" href="element.html">
    <meta charset="utf-8">
  </head>
  <body>
    <x-toggle name="Hello World"></x-toggle>
  </body>
</html>

1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Joe Clay
我启用了标志,但似乎没有任何变化。 - Daveman
在Firefox上执行时,是否在js控制台上出现任何错误? - Bardo
不,很清楚。 - Daveman
2个回答

13

从2018年6月份开始,可以通过以下步骤启用Firefox对自定义元素的支持:

  1. 在搜索栏中键入 about:config
  2. 搜索 dom.webcomponents.shadowdom.enabled 并点击启用。
  3. 搜索 dom.webcomponents.customelements.enabled 并点击启用。

希望这能帮助到某些人。

更新: 从Firefox 63起,自定义元素默认已受到Firefox的支持。


那么,如果FF的用户想要打开一个使用自定义元素的网站,他需要通过这些命令启用它们吗? - P.Petkov
1
这在早期版本的Firefox中是这样的,但自从Firefox 63以后,默认支持它。 - Mendy

11

Firefox尚未推出Custom Elements v1版本,这是最新的标准,它规定了使用customElements.define()来定义一个元素(相对于v0版本,在Firefox中需要使用document.registerElement()并开启dom.webcomponents.enabled标志)。

目前,Chrome是唯一原生支持Custom Elements v1的浏览器,但其他主流浏览器也都支持它。

Firefox有一个关于支持Custom Elements v1的未解决的bug

在此期间,您最好使用Custom Elements v1 Polyfill来支持不支持它的浏览器。您可以使用'customElements' in window来检测是否支持Custom Elements v1。


不知何故,通过加载webcomponents.js并没有起作用,但是单独加载webcomponents-lite.jscustom-elements.jsshadydom.jsshadycss.js却可以。谢谢! - Daveman
1
Opera也支持CustomElements,供您参考。 - zezba9000
Safari 10.1增加了对自定义元素v1的支持。 - JohnRiv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接