Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.
MessageEvent
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since julio de 2015.
La interfazMessageEvent representa un mensaje recibido por un objeto de destino.
Esto se utiliza para representar mensajes en:
- Eventos enviados por el servidor (ver
EventSource.message_event). - Web sockets (ver la propiedad
onmessagede la interfazWebSocket). - Mensajes entre documentos (ver
Window.postMessage()yWindow.message_event). - Canal de mensajería (ver
MessagePort.postMessage()yMessagePort.message_event). - Mensajes entreworkers y/o documentos (consulte las dos entradas anteriores, pero también
Worker.postMessage(),Worker.message_event,ServiceWorkerGlobalScope.message_event, etcetera). - Canales de difusión (ver
Broadcastchannel.postMessage()) yBroadcastChannel.message_event). - Canales de datos WebRTC (consulte
onmessage).
La acción desencadenada por este evento se define en un conjunto de funciones como el manejador de eventos para el eventomessage relevante (por ejemplo, usandoonmessage como se indica arriba).
Nota: Esta característica está disponible enWeb Workers.
In this article
Constructor
MessageEvent()Crea un nuevo
MessageEvent.
Propiedades de instancia
Esta interfaz también hereda propiedades de su padre,Event.
MessageEvent.dataRead onlyLos datos enviados por el emisor del mensaje.
MessageEvent.originRead onlyUna cadena que representa el origen del emisor del mensaje.
MessageEvent.lastEventIdRead onlyUna cadena que representa un ID único para el evento.
MessageEvent.sourceRead onlyUn
MessageEventSource(que puede ser un objetoWindowProxy,MessagePortoServiceWorker) que representa el emisor del mensaje.MessageEvent.portsRead onlyUn arreglo de objetos
MessagePortque representan los puertos asociados con el canal a través del cual se envía el mensaje (cuando corresponda, por ejemplo, en la mensajería del canal o cuando se envía un mensaje a unworker compartido).
Métodos de instancia
Esta interfaz también hereda métodos de su padre,Event.
initMessageEvent()ObsoletoInicializa un evento de mensaje.No uses más esto —usa el constructor
MessageEvent()en su lugar.
Ejemplos
En nuestroEjemplo de unworker compartido básico (ejecutarworker compartido), tenemos dos páginas HTML, cada una de las cuales usa algo de JavaScript para realizar un cálculo simple. Los diferentesscripts usan el mismo archivo de trabajo para realizar el cálculo; ambos pueden acceder a él, incluso si sus páginas se ejecutan dentro de ventanas diferentes.
El siguiente fragmento de código muestra la creación de un objetoSharedWorker mediante el constructorSharedWorker(). Ambosscripts contienen esto:
const myWorker = new SharedWorker("worker.js");Ambosscripts luego acceden alworker a través de un objetoMessagePort creado usando la propiedadSharedWorker.port. Si el eventoonmessage se adjunta usandoaddEventListener, el puerto se inicia manualmente usando su métodostart():
myWorker.port.start();Cuando se inicia el puerto, ambosscripts envían mensajes alworker y manejan los mensajes enviados desde él usandoport.postMessage() yport.onmessage, respectivamente:
first.onchange = () => { myWorker.port.postMessage([first.value, second.value]); console.log("Mensaje publicado al worker");};second.onchange = () => { myWorker.port.postMessage([first.value, second.value]); console.log("Mensaje publicado al worker");};myWorker.port.onmessage = (e) => { result1.textContent = e.data; console.log("Mensaje recibido del worker");};Dentro delworker usamos el manejadoronconnect para conectarnos al mismo puerto mencionado anteriormente. Se puede acceder a los puertos asociados con eseworker en la propiedadports del eventoconnect — luego usamosMessagePortstart() para iniciar el puerto, y el manejadoronmessage para manejar los mensajes enviados desde los hilos principales.
onconnect = (e) => { const port = e.ports[0]; port.addEventListener("message", (e) => { const workerResult = `Resultado: ${e.data[0] * e.data[1]}`; port.postMessage(workerResult); }); port.start(); // Requerido cuando se usa addEventListener. De lo contrario, lo llama implícitamente onmessage setter.};Especificaciones
| Specification |
|---|
| HTML> # the-messageevent-interface> |
Compatibilidad con navegadores
Véase también
ExtendableMessageEvent— similar a esta interfaz pero utilizada en interfaces que necesitan dar más flexibilidad a los autores.