Mensajería web HTML5: no funciona localmente

Estoy jugando con HTML5 WebMessaging. Acabo de probar con un ejemplo simple de enviar un mensaje entre sitios. Él funciona cuando lo envío a un sitio público (vea el ejemplo a continuación: dirección jsbin de iframe) pero no funciona si uso el mismo código (como en jsbin) implementado en mi computadora local (con la página web configurada en http://192.168.1.20/web_messaging/b.html).

Estoy usando el tiempo de espera para que iframe esté listo, la verificación de origen se omite intencionalmente (para la prueba).

¿Alguna idea de qué puede estar mal?

código de "cliente":

<!DOCTYPE html>
<meta charset="utf-8" />
<iframe id="iframe" src="http://jsbin.com/eKUguFO/1"></iframe> 

<!--<iframe id="iframe" src="http://192.168.1.20/web_messaging/b.html">  doesn't work!-->
<script language="javascript" type="text/javascript">

var win = document.getElementById("iframe").contentWindow;

window.setTimeout(function() 
{win.postMessage('Hello111', "http://jsbin.com");}, 2000);

//win.postMessage('Hello100', "http://192.168.1.20");

</script>
 <h2>WMTest - A2</h2> 
<div id="output"></div>
</html>

preguntado el 03 de diciembre de 13 a las 11:12

1 Respuestas

El problema real fue que no hubo una etiqueta iframe de cierre en el caso de su servidor local, como resultado, no se ejecutó javascript para enviar el mensaje. El siguiente código me funciona localmente solo con direcciones IP (sin nombres de dominio).

b.html

<!DOCTYPE html>
<meta charset="utf-8" />
<!-- <iframe id="iframe" src="http://jsbin.com/eKUguFO/1"></iframe>  -->

<iframe id="iframe" src="http://xx.xx.xx.2/web_messaging/c.html"> </iframe>
<script language="javascript" type="text/javascript">

var win = document.getElementById("iframe").contentWindow;

window.setTimeout(function() {
win.postMessage('Hello111!!!', "http://xx.xx.xx.2");
//win.postMessage('Hello100', "http://a.test.com");
}, 2000);

//win.postMessage('Hello100', "http://192.168.1.20");

</script>
 <h2>WMTest - A2</h2> 
<div id="output"></div>
</html>

c.html

<!DOCTYPE html>
<html>
<head>
<title>.postMessage target</title>
<style>
body { 
  font: normal 16px/20px Helvetica, sans-serif;
  margin: 0;
  padding: 20px;
}


</style>
</head>
<body>
<strong>This iframe is located on jsbin.com (different domain)</strong>
<p id="test">Send me a message!</p>
<script>
window.onmessage = function(e){
  if ( e.origin !== "http://anydomain.com" ) {
    //return;
  }

  document.getElementById("test").innerHTML = e.origin + " said: " + e.data;
};
</script>
</body>
</html>

Respondido el 04 de diciembre de 13 a las 11:12

Lo intenté, sin éxito. Modifiqué el archivo de hosts (verifiqué que los dominios son accesibles en ambos lados) pero no ayudó. ¿Te funciona el ejemplo? (Puede copiar el código jsbin y ejecutar cargarlo localmente) - John Smith

¡Oh, tonto de mí, no me di cuenta de eso! Ahora funciona bien, ¡muchas gracias por su ayuda! :) - John Smith

Usé firebug para ver el HTML generado y descubrí que no había código después de ese IFRAME. - boris ivanov

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.