--- title: CustomEvent slug: Web/API/CustomEvent tags: - API - CustomEvent - DOM - Interface - NeedsExample - Reference - インターフェイス translation_of: Web/API/CustomEvent ---
{{APIRef("DOM")}}

CustomEvent インターフェイスは、何らかの目的でアプリケーションから初期化されるイベントを表します。

{{AvailableInWorkers}}

コンストラクター

{{domxref("CustomEvent.CustomEvent", "CustomEvent()")}}
CustomEvent を生成します。

プロパティ

{{domxref("CustomEvent.detail")}} {{readonlyinline}}
イベント初期化時にどんなデータでも受け渡すことができます。

このインターフェイスは親である {{domxref("Event")}} からプロパティを継承します

{{Page("/ja/docs/Web/API/Event", "Properties")}}

メソッド

{{domxref("CustomEvent.initCustomEvent()")}} {{deprecated_inline}}

CustomEvent オブジェクトを初期化します。もし該当イベントがすでに移譲されたことがある場合、この関数は何もしません。

このインターフェイスは親である {{domxref("Event")}} から関数を継承します

{{Page("/ja/docs/Web/API/Event", "Methods")}}

仕様書

仕様書 状態 備考
{{SpecName('DOM WHATWG','#interface-customevent','CustomEvent')}} {{Spec2('DOM WHATWG')}} 初回定義

ブラウザーの互換性

{{Compat("api.CustomEvent")}}

特権を持つコードから持たないコードへのイベント発行

CustomEvent を特権を持つコード (つまり、エクステンション) から持たないコード (つまり、ウェブページ) へ発行する時、セキュリティの問題を考慮すべきです。Firefox と他の Gecko アプリケーションは、自動的にセキュリティホールを防ぐ為、他者から直接利用される1つのコンテキスト内で作られるオブジェクトを制限します。しかし、この制限によりコードが期待した通りに動作しない可能性があります。

CustomEvent オブジェクトが作られている間、同じ window からオブジェクトを作る必要があります。作られた CustomEventdetail 属性は同じ制限の影響を受けるでしょう。制限のないコンテンツからは StringArray の値は読み込み可能ですが、カスタム Object は読み込めません。カスタムオブジェクトを使用している間、Components.utils.cloneInto() を使ってコンテンツのスクリプトから読み込み可能なオブジェクトの属性を定義する必要があるでしょう。

// doc はコンテンツのドキュメントの参照
function dispatchCustomEvent(doc) {
  var eventDetail = Components.utils.cloneInto({foo: 'bar'}, doc.defaultView);
  var myEvent = doc.defaultView.CustomEvent("mytype", eventDetail);
  doc.dispatchEvent(myEvent);
}

しかし、関数を外部にさらすと、 chrome 特権でコンテンツスクリプトの実行を許可することになり、脆弱性となる可能性があることを覚えておく必要があります。

関連情報