CustomElementRegistry: initialize() Methode
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die initialize()-Methode des CustomElementRegistry-Interfaces assoziiert dieses Register mit einem DOM-Teilbaum. Dabei wird das customElementRegistry jedes inklusiven Nachkommens, der noch keines hat, gesetzt und es wird versucht, gefundene Custom Elements zu aktualisieren.
Syntax
initialize(root)
Parameter
root-
Ein
Node-Objekt (typischerweise einDocument,ShadowRootoderElement), dessen inklusive Nachkommen mit diesem Register assoziiert werden.
Rückgabewert
Keiner (undefined).
Ausnahmen
NotSupportedErrorDOMException-
Wird ausgelöst, wenn dieses
CustomElementRegistrynicht gescopet ist (d.h. nicht mitnew CustomElementRegistry()erstellt wurde) und entwederrooteinDocument-Knoten ist oderroots DokumentenknotencustomElementRegistrynicht diesesCustomElementRegistryist.
Beschreibung
Wenn initialize() aufgerufen wird, durchläuft es die inklusiven Nachkommen von root in Baumreihenfolge. Für jedes Element (oder Document/ShadowRoot an der Wurzel), das ein null customElementRegistry hat, wird das Register auf dieses CustomElementRegistry gesetzt. Anschließend wird versucht, jedes Element zu aktualisieren, dessen customElementRegistry mit diesem Register übereinstimmt.
Sobald das customElementRegistry eines Knotens auf ein CustomElementRegistry-Objekt gesetzt ist, kann es nicht mehr geändert werden. Das bedeutet, dass initialize() das Register nur für Knoten setzen kann, bei denen es noch null ist. Es wird jedoch trotzdem versucht, jedes Element zu aktualisieren, dessen customElementRegistry bereits mit diesem Register übereinstimmt, nicht nur neu zugewiesene Elemente.
Knoten haben in mehreren Situationen ein null-Custom-Element-Register, einschließlich:
- Dokumente, die durch
DOMImplementation.createHTMLDocument()erstellt wurden, deren Custom-Element-Register standardmäßignullist. Elemente, die innerhalb solcher Dokumente erstellt wurden, haben ebenfallsnullRegister. - Shadow Roots, die mit
customElementRegistryaufnullgesetzt überElement.attachShadow()erstellt wurden. - Deklarative Shadow Roots, die aus einem
<template>-Element mit demshadowrootcustomelementregistry-Attribut erstellt wurden, das den HTML-Parser anweist, das Custom-Element-Register des Shadow Roots alsnullzu belassen.
Beispiele
>Initialisierung eines Shadow Roots mit einem gescopten Register
In diesem Beispiel wird ein Shadow Root ohne ein Custom-Element-Register erstellt, HTML mit einem Custom-Element hinzugefügt und dann initialize() aufgerufen, um ein gescoptes Register zu assoziieren. Das <my-element>-Element wird aktualisiert, wenn initialize() das Register auf den Shadow Root und seine Nachkommen setzt.
const myRegistry = new CustomElementRegistry();
myRegistry.define(
"my-element",
class extends HTMLElement {
connectedCallback() {
this.textContent = "Hello from scoped registry!";
}
},
);
const host = document.createElement("div");
document.body.appendChild(host);
// Create the shadow DOM structure without a registry
const shadow = host.attachShadow({
mode: "open",
customElementRegistry: null,
});
shadow.innerHTML = "<my-element></my-element>";
// Later, associate the scoped registry and upgrade custom elements
myRegistry.initialize(shadow);
console.log(shadow.querySelector("my-element").textContent);
// "Hello from scoped registry!"
Spezifikationen
| Specification |
|---|
| HTML> # dom-customelementregistry-initialize> |