--- title: CustomEvent slug: Web/API/CustomEvent tags: - API - DOM - Interfaz - Referencia translation_of: Web/API/CustomEvent ---

{{APIRef("DOM")}}La interfaz CustomEvent  representa eventos inicializados por una aplicación para cualquier propósito.

{{AvailableInWorkers}}

Constructor

{{domxref("CustomEvent.CustomEvent", "CustomEvent()")}}

Crea un CustomEvent.

Propiedades

{{domxref("CustomEvent.detail")}} {{readonlyinline}}
Cualquier dato transmitido al inicializar el evento.

Esta interfaz hereda las propiedades de su padre, {{domxref("Event")}}:

{{Page("/es/docs/Web/API/Event", "Propiedades")}}

Métodos

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

Inicializar un objeto CustomEvent. Si el evento ya ha sido enviado, este método no hace nada.

Esta interfaz hereda los métodos de su padre, {{domxref("Event")}}:

{{Page("/es/docs/Web/API/Event", "Métodos")}}

Especificaciones

Especificación Estado Comentario
{{SpecName('DOM WHATWG','#interface-customevent','CustomEvent')}} {{Spec2('DOM WHATWG')}} Definición inicial.

Compatibilidad con navegadores

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

Disparar desde código privilegiado a código no-privilegiado

Al disparar un CustomEvent desde código privilegiado (una extensión) a un código no-privilegiado (una página web),  deben considerarse algunos problemas de seguridad. Firefox y otras aplicaciones Gecko restringen al objeto creado desde un contexto siendo directamente utilizado por otro, el cual automáticamente evitará los agujeros de seguridad, pero estas restricciones también pueden impedir que su código se ejecute como esperaba.

Al crear un objeto CustomEvent, debes crear el objeto desde la misma ventana. El atributo detail de tu CustomEvent estará sujeto a las mismas restricciones. Los valores de String y Array serán legibles sin restricciones por el content, pero los objetos personalizados no lo harán. Al utilizar un objeto personalizado, necesitaras definir que atributos de ese objeto se pueden leer desde la secuencia de comandos de contenido usando  Components.utils.cloneInto().

// doc es una referencia al contenido del documento
function dispatchCustomEvent(doc) {
  var eventDetail = Components.utils.cloneInto({foo: 'bar'}, doc.defaultView);
  var myEvent = doc.defaultView.CustomEvent("mytype", eventDetail);
  doc.dispatchEvent(myEvent);
}

Pero hay que tener en cuenta que exponer una función permitirá que el script content lo ejecute con privilegios de chrome, lo que puede abrir una vulnerabilidad de seguridad.

Ver también