CustomElementRegistry: CustomElementRegistry() コンストラクター
利用可能性は限定的
この機能はベースラインではありません。最も広く使用されているブラウザーの一部で動作しません。
Want more browser support for this feature? Tell us why.
CustomElementRegistry() コンストラクターは、スコープ付きの用途のために新しい CustomElementRegistry オブジェクトを作成します。
このコンストラクターは、カスタム要素の定義を、要素や ShadowRoot などの特定のスコープに制限する、スコープ付きレジストリーを作成するために特化して使用されます。
メモ:
グローバルな CustomElementRegistry オブジェクトは、Window に関連付けられていますが、このコンストラクターを使用して作成されるわけではありません。このオブジェクトは、ウィンドウの初期化時に自動的に作成され、window.customElements プロパティを介してアクセスできます。
構文
new CustomElementRegistry()
引数
なし。
返値
新しい CustomElementRegistry オブジェクトです。
解説
CustomElementRegistry を new CustomElementRegistry() で構築すると、その結果として生成されるレジストリーはスコープ付きとみなされます。これは、次のことを意味します。
define()を使用してこのレジストリーに追加されたカスタム要素の定義は、グローバルには利用できません。これらは、このレジストリーに関連付けられたノードにのみ適用されます。define()のextendsオプション(カスタム組み込み要素を作成するためのもの)は対応していません。スコープ付きレジストリーでextendsを使用しようとすると、NotSupportedErrorDOMExceptionが発生します。
スコープ付きレジストリーを DOM サブツリーに関連付けるには、initialize() メソッドを使用し、これを Element.attachShadow() に渡すか、Document.createElement() メソッドの customElementRegistry オプションを使用することもできます。
例
>スコープ付きカスタム要素レジストリーの作成
この例では、スコープ付きレジストリーを生成し、その上に独自の要素を定義して、そのレジストリーを Element.attachShadow() に渡しています。<my-element> を含む HTML がシャドウルートに追加されると、その要素はスコープ付きレジストリーの定義を使用してアップグレードされます。
const myRegistry = new CustomElementRegistry();
myRegistry.define(
"my-element",
class extends HTMLElement {
connectedCallback() {
this.textContent = "スコープ付きレジストリーからこんにちは!";
}
},
);
const host = document.createElement("div");
document.body.appendChild(host);
const shadow = host.attachShadow({
mode: "open",
customElementRegistry: myRegistry,
});
shadow.innerHTML = "<my-element></my-element>";
console.log(shadow.querySelector("my-element").textContent);
// "スコープ付きレジストリーからこんにちは!"
仕様書
| 仕様書 |
|---|
| HTML> # dom-customelementregistry> |