このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

CustomElementRegistry: CustomElementRegistry() コンストラクター

利用可能性は限定的

この機能はベースラインではありません。最も広く使用されているブラウザーの一部で動作しません。

Want more browser support for this feature? Tell us why.

CustomElementRegistry() コンストラクターは、スコープ付きの用途のために新しい CustomElementRegistry オブジェクトを作成します。

このコンストラクターは、カスタム要素の定義を、要素や ShadowRoot などの特定のスコープに制限する、スコープ付きレジストリーを作成するために特化して使用されます。

メモ: グローバルな CustomElementRegistry オブジェクトは、Window に関連付けられていますが、このコンストラクターを使用して作成されるわけではありません。このオブジェクトは、ウィンドウの初期化時に自動的に作成され、window.customElements プロパティを介してアクセスできます。

構文

js
new CustomElementRegistry()

引数

なし。

返値

新しい CustomElementRegistry オブジェクトです。

解説

CustomElementRegistrynew CustomElementRegistry() で構築すると、その結果として生成されるレジストリーはスコープ付きとみなされます。これは、次のことを意味します。

  • define() を使用してこのレジストリーに追加されたカスタム要素の定義は、グローバルには利用できません。これらは、このレジストリーに関連付けられたノードにのみ適用されます。
  • define()extends オプション(カスタム組み込み要素を作成するためのもの)は対応していません。スコープ付きレジストリーで extends を使用しようとすると、NotSupportedError DOMException が発生します。

スコープ付きレジストリーを DOM サブツリーに関連付けるには、initialize() メソッドを使用し、これを Element.attachShadow() に渡すか、Document.createElement() メソッドの customElementRegistry オプションを使用することもできます。

スコープ付きカスタム要素レジストリーの作成

この例では、スコープ付きレジストリーを生成し、その上に独自の要素を定義して、そのレジストリーを Element.attachShadow() に渡しています。<my-element> を含む HTML がシャドウルートに追加されると、その要素はスコープ付きレジストリーの定義を使用してアップグレードされます。

js
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

ブラウザーの互換性

関連情報