自定义元素适用于 Safari,但不适用于 Firefox 和 Chrome

2023-12-26

我确信我遗漏了规范中的一些基本内容,但在运行于 Safari 的 Mac 上构建了大量自定义元素后,我发现它们不适用于 Firefox 和 Chrome。我缺少什么?

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>NoCE</title>
        <script>
            class NoCE extends HTMLElement {
                constructor(args) {
                    super();
                }

                connectedCallback() {
                    this.innerHTML = "<p>It Works</p>";
                }

                attributeChangedCallback(name, oldValue, newValue, namespaceURI) {}

                disconnectedCallback() {}

                adoptedCallback() {}

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

            customElements.define("no-ce", NoCE, { extends: "div" });
        </script>
    </head>
    <body>
        <no-ce>
            No custom elements
        </no-ce>
    </body>
</html>

在 Safari 中,页面显示“It Works”。在 Firefox 和 Chrome 中,它显示“无自定义元素”(在 Mac OS X 上运行)。

Safari 12.0.2 火狐浏览器 64.0.2 铬 71.0.3578.98


你混淆了定义自主自定义元素(又名新的 HTML 标签)定制内置元素(又名标准 HTML 元素扩展),其语法略有不同。

For 自主定制元素:

class NoCE extends HTMLElement
...
customElements.define( 'no-ce', NoCE )
...
<no-ce><no-ce>

For 定制内置<div> Element:

class NoCE extends HTMLDivElement
...
customElements.define( 'no-ce', NoCE, { extends: 'div'} )
...
<div is='no-ce'></div>

Safari 不实现自定义的 buit-it 元素,因此会忽略extends选项并将您的代码作为简单的自主自定义元素进行处理。

另一方面,Chrome 和 Firefox 将忽略您的自定义元素定义,因为它不正确。


如果你想让你的自定义元素继承自<div>你应该首先延长NoCE与 一起上课HTMLDivElement,然后使用<div is="no-ce">句法。 (但是如果没有 polyfill,这在 Safari 中是行不通的。)

或者,如果您想使用基本的 HTML 标签创建自己的 HTML 标签<div>行为,您可以定义一个自治自定义元素并将其应用于{display:block}CSS 样式。

class ACE extends HTMLElement {
  connectedCallback() {
    this.attachShadow( { mode: 'open' } )
        .innerHTML = `<style> :host { display: block } </style>
                      Autonomous CE works`
  }
}
customElements.define( 'a-ce', ACE )


class CBE extends HTMLDivElement {
  connectedCallback() {
    this.attachShadow( { mode: 'open' } )
        .innerHTML = `Customized DIV works`
  }
}
customElements.define("c-ce", CBE, { extends: "div" } )
<a-ce>autonomous custom element not implemented</a-ce>

<div is="c-ce">customized built-in element not implemented</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义元素适用于 Safari,但不适用于 Firefox 和 Chrome 的相关文章

随机推荐

  • 在 Python TCP 流中使用分隔符

    我正在开发一个使用 TCP 协议从天线收集 ADS B 消息的程序 由于我是Python新手 我使用以下脚本来建立连接 问题是我同时收到多条消息 因为 TCP 是面向流的 例如 我想使用 n 分隔符分隔每条消息 每条消息开头有 结尾有 长度
  • 获取 Woocommerce 中当天的订单总购买金额

    对于 Woocommerce 我在下面编写了代码 试图获取今天的订单总购买金额 function order total woo fahad Get orders from people named John that were paid
  • 如何更新xslt中的变量值?

    我已在 xsl 文件中声明了一个变量 现在我想用新值更新旧值 例如
  • 使用 WiX 打包包含许多文件的安装程序

    我有一个包含数百个文件的 WiX 3 项目 我似乎不知道如何使用通配符将它们全部包含在内 我已经尝试过这个 heat exe dir Build gg ke template fragment out Files wxs 这会生成一个片段
  • 当视图被推送时,UISearchController 不会被关闭

    我知道这是一篇很长的文章 但这只是我保证的一个问题 设置 我在 UISearchController 中遇到了一些非常奇怪的行为 让我描述一下层次结构 然后我将逐步解释视频中发生的情况 您看到的第一个视图是常规 ViewController
  • 这个 typedef 是什么意思?

    我是 C 新手 这个 typedef 对我来说看起来有点奇怪 有人可以解释它的作用吗 typedef void alpm cb log alpm loglevel t const char va list 它位于头文件中 您可以使用 cde
  • 当 PythonOperator 出现错误“Negsignal.SIGKILL”时,Airflow DAG 失败

    我在 Cloud Composer v1 16 16 上运行 Airflowv1 10 15 我的 DAG 看起来像这样 from datetime import datetime timedelta imports from airflo
  • 在多线程代码中出于性能原因应避免什么?

    我目前正在审查 重构一个多线程应用程序 该应用程序应该是多线程的 以便能够使用所有可用的内核并理论上提供更好 卓越的性能 卓越是更好的商业术语 P 编写多线程应用程序时应该注意哪些事项 我的意思是那些会极大地影响性能的事情 甚至可能达到这样
  • 更改用于 TF 命令行的登录帐户

    当使用TFS 2012的命令行版本时 我们调用 TF exe get Path To Team Project Some Folder recursive 通过命令行提示符的调用 我的命令成功了 我没有为此通话输入任何用户名 密码 我想更改
  • 我正在运行哪个版本的 PostgreSQL?

    我在企业环境中 运行Debian Linux 并且没有自己安装它 我使用 Navicat 或 phpPgAdmin 访问数据库 如果有帮助的话 我也没有对运行数据库的服务器的外壳访问权限 从 PostgreSQL 运行此查询 SELECT
  • RxSwift:BehaviorRelay 代替变量使用

    我是 RxSwift 的新手 正在阅读有关主题的内容 我尝试过Variable主题 这又在控制台中发出警告 DEPRECATED Variable is planned for future deprecation Please consi
  • 有没有更简洁的方法来注册 Qt 自定义事件?

    我需要为 Qt 应用程序创建几个自定义事件类 现在 看起来我需要为每个事件类实现以下事件类型注册代码 class MyEvent public QEvent public MyEvent QEvent registeredType stat
  • AUTH_LOGIN 获取完成后如何调用 AUTH_CHECK?

    我正在调用 HTTP API 以使用返回承诺的 axios 登录 AUTH LOGIN 在 API 调用完成之前 AUTH CHECK 被调用并失败 是否可以仅在 http 调用完成后触发 AUTH CHECK 请在下面找到我的 authp
  • Android:如何使用相同的相机意图拍摄多张照片

    我制作了一个 Android 应用程序 可以一张一张地拍摄照片 存储它们 向用户提供预览等等 所有这些任务都是通过类型意图来完成的ACTION IMAGE CAPTURE 所以 每次用户想要拍照时 他应该点击启动意图的 拍照按钮 等待几秒钟
  • 如何将特定状态按组与R中的ggplot2中的一个标签合并在一起?

    我想绘制美国的电网地图 所以我需要将特定的州合并在一起 我想为这些状态绘制边界 但它不起作用 每组也只有一个标签 这是我的数据 https iastate box com s 12xru62lvmbbkrohsn7b4wwexq11umn7
  • CSS :第一个子选择器 IE7

    我遇到了 IE7 的小问题 我有以下 CSS 代码 但它在 IE7 中不起作用 但是 如果不组合 row class span 和 first child 都可以工作 有没有办法做类似的事情或者让它以某种方式工作 row class spa
  • 我可以在 INSERT 语句中使用别名吗?

    我们可以在 insert into 语法中使用别名吗 以下均无效 INSERT INTO tableblabla AS bla INSERT INTO bla tableblabla INSERT INTO tableblabla bla
  • 使用 Java API 创建简单的 1 行 Spark DataFrame

    在 Scala 中 我可以从内存中的字符串创建单行 DataFrame 如下所示 val stringAsList List buzz val df sqlContext sparkContext parallelize jsonValue
  • Dnx 4.5.1/Dnx Core 5.0 不明确的参考

    在我和其他人的许多项目中 如果我使用属于不同 asp net5 项目的对象 则会弹出不明确的引用错误 有趣的是 它仍然可以编译和工作 但没有智能感知 并且我的代码被红线覆盖 一个例子是我有一个指向我的 MVC 项目的测试项目 当我尝试创建
  • 自定义元素适用于 Safari,但不适用于 Firefox 和 Chrome

    我确信我遗漏了规范中的一些基本内容 但在运行于 Safari 的 Mac 上构建了大量自定义元素后 我发现它们不适用于 Firefox 和 Chrome 我缺少什么