Comunicación entre una escena de Descartes con la página HTML madre o con la página HTML hija
Con el intérprete DescartesJS, una escena de Descartes puede comunicarse con la página HTML que le da soporte siempre que la escena esté embebida mediante un iframe, y también puede comunicarse con una página HTML que haya sido abierta por ella a través de un espacio HTMLIframe.
En la imagen siguiente tenemos en el <body> de una página html un <iframe> a través del cual se embebe un fichero html ( en este caso ese archivo se denomina comunicacion_Descartes.html), el cual contiene una escena de Descartes.
Para que una pagina html, que es madre de una escena de Descartes a través de un iframe o que es hija de ella mediante un espacio HTMLIframe, pueda recibir los mensajes que envía la escena Descartes mediante las funciones para la comunicación, necesita tener un manejador de eventos
elemento.addEventListener(«message», funcionQueManejaLosMensajes)
donde elemento es elemento de la página al que se le asocia el manejador de los eventos que sobre él acontecen y la función funcionQueManejaLosMensajes sirve para gestionar el evento. A continuación se refleja un esquema de esa función donde se controla que el mensaje sea tipo set o update. En lugar del evento «message» pueden contemplarse otros.
__________________________________________________
function funcionQueManejaLosMensajes(evt) {
var data = evt.data;
// se maneja un mensaje del tipo set
// data.name es el nombre de la variable
// data.value es el valor de la variable
if (data.type === «set») {
// incluir código deseado
}
// se maneja un mensaje del tipo update
else if (data.type === «update») {
// incluir código deseado
}
}
___________________________________________________________________
Comunicación de la página HTML madre con la escena de Descartes
Para enviar información desde una pagina html, madre de una escena Descartes mediante iframe, a la escena de Descartes se utiliza la interfaz de comunicación window.postMessage de JavaScript, donde los mensajes son de la siguiente forma:
referenciaAlIframe.contentWindow.postMessage({ type: «update» }, ‘*’);
referenciaAlIframe.contentWindow.postMessage({ type: «set», name: varName, value: value }, ‘*’);
donde varName es una cadena con el nombre de la variable que se le quiere pasar a Descartes y value es el valor de la variable.
El esquema lógico-funcional de la escena anterior es el siguiente:
var boton = document.getElementById(«enviar»);
var iframe = document.getElementById(«el_iframe»);
boton.addEventListener(«click», function(evt) {
iframe.contentWindow.postMessage({ type: «set», name: «unaVariable», value: contenido.value }, ‘*’);
iframe.contentWindow.postMessage({ type: «update» }, ‘*’);
});
function funcionQueManejaLosMensajes(evt) {
var data = evt.data;
// se maneja un mensaje del tipo set
if (data.type === «set») {
// data.name es el nombre de la variable
// data.value es el valor de la variable
document.getElementById(«textoRecibido»).textContent = data.value; // este es solo un ejemplo de lo que se puede hacer con los mensajes
}
}
var iframe = document.getElementById(«el_iframe»);
contenido.addEventListener(«change«, function(evt) {
iframe.contentWindow.postMessage({ type: «set», name: «unaVariable», value: contenido.value }, ‘*’);
iframe.contentWindow.postMessage({ type: «update» }, ‘*’);
});
Haz un comentario