La mensajería web o mensajería entre documentos es una API introducida en la especificación preliminar de WHATWG HTML5 , que permite que los documentos se comuniquen entre sí a través de diferentes orígenes o dominios de origen [1] mientras se procesan en un navegador web . Antes de HTML5, los navegadores web no permitían las secuencias de comandos entre sitios para protegerse de los ataques de seguridad. Esta práctica también impedía la comunicación entre páginas no hostiles, lo que dificultaba la interacción de documentos de cualquier tipo. [1] [2] La mensajería entre documentos permite que los scripts interactúen a través de estos límites, al tiempo que proporciona un nivel rudimentario de seguridad.
Requisitos y atributos
Usando el postMessage
método de la API de mensajería , los mensajes de texto sin formato se pueden enviar de un dominio a otro, por ejemplo, de un documento principal a un IFRAME . [3] Esto requiere que el autor obtenga primero el Window
objeto del documento de recepción. Como resultado, los mensajes se pueden enviar a lo siguiente: [2]
- otros marcos o iframes dentro de la ventana del documento del remitente
- Windows el documento del remitente se abre explícitamente a través de llamadas de JavaScript
- la ventana principal del documento remitente
- la ventana que abrió el documento del remitente
El mensaje que event
se recibe tiene los siguientes atributos:
data
- Los datos o el contenido real del mensaje entrante.origin
- El origen del documento remitente. Por lo general, esto incluye el esquema, el nombre de host y el puerto. No incluye el identificador de ruta o fragmento. [1]source
- el origenWindowProxy
del documento (la ventana de origen).
postMessage
no es una llamada de bloqueo; los mensajes se procesan de forma asincrónica. [4]
Ejemplo
Considere que queremos que el documento A se cargue desde example.net
para comunicarse con el documento B cargado desde example.com
en una iframe
ventana emergente o. [1] El JavaScript del documento A tendrá el siguiente aspecto:
var o = documento . getElementsByTagName ( 'iframe' ) [ 0 ]; o . contentWindow . postMessage ( 'Hola B' , 'http://example.com/' );
Se contentWindow
pasa al origen de nuestro objeto postMessage
. Debe coincidir con el origin
del documento con el que deseamos comunicarnos (en este caso, el documento B). De lo contrario, se producirá un error de seguridad y el script se detendrá. [3] El JavaScript para el documento B tendrá el siguiente aspecto:
función receptor ( evento ) { if ( evento . origen == 'http://example.net' ) { if ( evento . datos == 'Hola B' ) { evento . fuente . postMessage ( 'Hola A, ¿cómo estás?' , event . origin ); } else { alerta ( evento . datos ); } } } ventana . addEventListener ( 'mensaje' , receptor , falso );
Un detector de eventos está configurado para recibir mensajes del documento A. Usando la origin
propiedad, luego verifica que el dominio del remitente sea el dominio esperado. El documento B luego mira el mensaje, ya sea mostrándolo al usuario o respondiendo a su vez con un mensaje propio para el documento A. [1]
Seguridad
La comprobación de origen deficiente puede suponer un riesgo para las aplicaciones que emplean mensajería entre documentos. [5] Para protegerse contra código malicioso de dominios extranjeros, los autores deben verificar el origin
atributo para asegurarse de que se aceptan mensajes de dominios de los que esperan recibir mensajes. 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 Android . [6] Existe soporte para la API en los motores de diseño Trident , Gecko , WebKit y Presto . [7]
Ver también
Referencias
- ^ a b c d e f Mensajería entre documentos - Borrador de estándar HTML
- ^ a b Temas de programación DOM de WebKit: mensajería entre documentos [ enlace muerto ]
- ^ a b Remy, Sharp, Messages, Workers, and Sockets , Presentación de HTML5 , New Riders, 2011, p. 197-199
- ^ http://www.w3.org/TR/2010/WD-webmessaging-20101118/#web-messaging
- ^ Seguridad HTML5 en pocas palabras
- ^ ¿ Cuándo puedo utilizar la mensajería entre documentos?
- ^ Una selección de funciones admitidas en HTML5 [ enlace muerto ]
enlaces externos
- Recomendación de mensajería web HTML5
- Especificación de mensajería web HTML5
- Mensajería entre documentos: estándar de borrador HTML, WHATWG
- Temas de programación DOM de WebKit: mensajería entre documentos, Biblioteca de desarrolladores de Apple[ enlace muerto ]
- Ing, Chris (17 de mayo de 2010), Seguridad HTML5 en pocas palabras, Veracode
- ¿Cuándo puedo utilizar la mensajería entre documentos?, Puedo usar
- Una selección de funciones admitidas en HTML5