La mensajería web , o mensajería entre documentos , es una API introducida en la especificación preliminar de HTML5 de WHATWG , que permite que los documentos se comuniquen entre sí a través de diferentes orígenes o dominios de origen [ 1 ] mientras se renderizan en un navegador web . Antes de HTML5, los navegadores web no permitían el cross-site scripting para protegerse contra ataques de seguridad. Esta práctica también prohibía la comunicación entre páginas no hostiles, lo que dificultaba cualquier tipo de interacción entre documentos. [ 1 ] [ 2 ] La mensajería entre documentos permite que los scripts interactúen a través de estas fronteras, a la vez que proporciona un nivel rudimentario de seguridad.
Requisitos y atributos
Utilizando el postMessagemétodo de la API de mensajería, se pueden enviar mensajes de texto plano de un dominio a otro, por ejemplo, de un documento principal a un IFRAME . [ 3 ] Esto requiere que el autor obtenga primero el Windowobjeto del documento receptor. Como resultado, los mensajes se pueden publicar en los siguientes: [ 2 ]
- otros marcos o iframes dentro de la ventana del documento del remitente
- Las ventanas que el documento del remitente abre explícitamente a través de llamadas JavaScript
- la ventana principal del documento remitente
- la ventana que abrió el documento del remitente
El mensaje eventrecibido tiene los siguientes atributos:
data– Los datos, o el contenido real, del mensaje entrante.origin– El origen del documento remitente. Normalmente incluye el esquema, el nombre de host y el puerto. No incluye la ruta ni el identificador de fragmento. [ 1 ]source– laWindowProxyubicación de donde proviene el documento (la ventana de origen).
postMessageNo es una llamada bloqueante; los mensajes se procesan de forma asíncrona. [ 4 ]
Ejemplo
Supongamos que queremos que el documento A cargado desde example.netse comunique con el documento B cargado desde example.comen una iframeventana emergente. [ 1 ] El código JavaScript para el documento A se verá de la siguiente manera:
var o = document.getElementsByTagName ( ' iframe' ) [ 0 ] ; o.contentWindow.postMessage ( 'Hola B' , ' http://example.com/ ' ) ;El origen de nuestro contentWindowobjeto se pasa a postMessage. Debe coincidir con el origindel documento con el que deseamos comunicarnos (en este caso, el documento B). De lo contrario, se generará un error de seguridad y el script se detendrá. [ 3 ] El JavaScript para el documento B se verá de la siguiente manera:
function receiver ( event ) { if ( event . origin == 'http://example.net' ) { if ( event . data == 'Hello B' ) { event . source . postMessage ( 'Hello A, how are you?' , event . origin ); } else { alert ( event . data ); } } } window . addEventListener ( 'message' , receiver , false );Se configura un detector de eventosorigin para recibir mensajes del documento A. Mediante la propiedad, comprueba que el dominio del remitente sea el esperado. El documento B examina el mensaje y, o bien lo muestra al usuario, o bien responde con un mensaje propio para el documento A. [ 1 ]
Seguridad
Una verificación de origen deficiente puede representar un riesgo para las aplicaciones que emplean mensajería entre documentos. [ 5 ] Para protegerse contra código malicioso de dominios externos, los autores deben verificar el originatributo para asegurarse de que los mensajes se acepten de los dominios de los que esperan recibirlos. También se debe verificar que el formato de los datos entrantes coincida con el formato esperado. [ 1 ]
Apoyo
La compatibilidad con la mensajería entre documentos existe en las versiones actuales de Internet Explorer , Mozilla Firefox , Safari , Google Chrome , Opera , Opera Mini , Opera Mobile y el navegador web de Android . [ 6 ] La compatibilidad con la API existe en los motores de diseño Trident , Gecko , WebKit y Presto . [ 7 ]
Véase también
Referencias
- 1 2 3 4 5 6 Mensajería entre documentos – Borrador del estándar HTML
- 1 2 " Temas de programación DOM de WebKit - Mensajería entre documentos " . Archivado del original el 9 de junio de 2012. Consultado el 29 de diciembre de 2013 .
- 1 2 Remy, Sharp, Messages, Workers, and Sockets , Introducing HTML5 , New Riders, 2011, págs. 197-199
- ↑ "Mensajería web HTML5" .
- ↑ Seguridad HTML5 en pocas palabras
- ↑ ¿Cuándo puedo usar la mensajería entre documentos?
- ↑ " Una selección de características compatibles con HTML5 " . Archivado del original el 12/11/2011 . Consultado el 18/04/2011 .
Enlaces externos
- Recomendación de mensajería web HTML5
- Especificación de mensajería web HTML5. Archivada el 24/12/2010 en Wayback Machine.
- Mensajería entre documentos: borrador del estándar HTML, WHATWG
- Temas de programación DOM de WebKit: Mensajería entre documentosBiblioteca para desarrolladores de Apple, archivada desde el original el 9 de junio de 2012 , consultada el 29 de diciembre de 2013.
- Eng, Chris (17-05-2010),Seguridad HTML5 en pocas palabrasVeracode
- ¿Cuándo puedo usar la mensajería entre documentos?, CanIUse
- Una selección de características compatibles con HTML5Archivado del original el 12/11/2011 , consultado el 18/04/2011.
- HTML
- Interfaces de programación de aplicaciones