Mensajería web HTML5: no funciona localmente
Frecuentes
Visto 176 veces
1
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>
1 Respuestas
1
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
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas html iframe cross-domain or haz tu propia pregunta.
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