--- title: CustomEvent slug: Web/API/CustomEvent tags: - API - CustomEvent - DOM - Interface - NeedsExample - Reference - インターフェイス translation_of: Web/API/CustomEvent ---
CustomEvent
インターフェイスは、何らかの目的でアプリケーションから初期化されるイベントを表します。
{{AvailableInWorkers}}
CustomEvent
を生成します。このインターフェイスは親である {{domxref("Event")}} からプロパティを継承します
{{Page("/ja/docs/Web/API/Event", "Properties")}}
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 からオブジェクトを作る必要があります。作られた CustomEvent
の detail
属性は同じ制限の影響を受けるでしょう。制限のないコンテンツからは String
と Array
の値は読み込み可能ですが、カスタム 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 特権でコンテンツスクリプトの実行を許可することになり、脆弱性となる可能性があることを覚えておく必要があります。