window.addEventListener('message', function(e) {
var iframe = document.createElement('iframe'),
ACMEplayer = {
element: iframe
},
d;
document.body.appendChild(iframe);
try {
d = JSON.parse(e.data); #Lo convierte en un elemento de tipo JSON
} catch (e) {
return;
}
switch (d.type) {
case "page-load":
ACMEplayer.element.scrollIntoView();
break;
case "load-channel":
ACMEplayer.element.src = d.url;
break;
case "player-height-changed":
ACMEplayer.element.style.width = d.width + "px";
ACMEplayer.element.style.height = d.height + "px";
break;
}
}, false);
Este código JavaScript escucha los mensajes enviados a la ventana del navegador (window) y ejecuta ciertas acciones en función del contenido del mensaje. A continuación, te explico el código paso a paso:
window.addEventListener('message', ...)):message de la ventana, que se activa cuando la ventana recibe un mensaje de otro contexto (por ejemplo, de un iframe o de otra ventana del navegador).message. Este evento ocurre cuando se recibe un mensaje desde otra ventana o iframe utilizando window.postMessage.var iframe = document.createElement('iframe')):iframe y lo agrega al cuerpo del documento (document.body.appendChild(iframe)).ACMEplayer: Se crea un objeto llamado ACMEplayer con una propiedad element que apunta al iframe recién creado. Este objeto parece estar pensado para gestionar el iframe.try { d = JSON.parse(e.data); } catch(e) { return; }):e.data) como un objeto JSON usando JSON.parse. Si el parseo falla (por ejemplo, si el mensaje no es un JSON válido), se interrumpe la ejecución (return).switch(d.type) {...}):d.type, se ejecuta una de las siguientes acciones:
case "page-load":
scrollIntoView().case "load-channel":
d.url. Esto hace que el iframe cargue la página en esa URL.case "player-height-changed":
d.width y d.height recibidos en el mensaje.Payload que ejecuta print()
Desde consola :
postMessage("{"type":"load-channel","url":"javascript:print()"}","*")
Desde exploit server :
`