2012-08-24 78 views
6

tengo una página html (main.html) abriendo una nueva pestaña en el mismo dominio usando javascript con el método window.open ("newtab.html").comunicación entre la pestaña del navegador

En la nueva pestaña, los usuarios hacen algo al finalizar su actividad haciendo clic en un botón. En este punto, me gustaría enviar un mensaje a la ventana de apertura. He intentado con postMessage, pero desde una nueva pestaña no puedo tener una referencia al abridor.

De nueva pestaña me gustaría algo así pero no tengo "ko"

var w = window.opener; 
if (w) { 
    w.postMessage("hi", "http://10.150.10.43"); 
} else { 
    alert("ko"); 
} 

¿Cuál es la mejor manera de enviar mensajes desde la pestaña/ventana secundaria a la principal (en el mismo dominio)?

muchas gracias Luca

+0

posible duplicado de [¿Puedo controlar dos ventanas del navegador con una aplicación HTML5?] (Http://stackoverflow.com/questions/5277482/can-i-control-two-browser-windows-with-one -html5-app) – josh3736

+1

¡Hola Luca, no olvides marcar la respuesta! Ivan merece los puntos de rep. :-) –

+0

Sí, tiene razón :) –

Respuesta

12

Eso es extraño. Abrir una nueva ventana con window.open("newtab.html") debería dar a la ventana recién abierta la posibilidad de hacer referencia al abridor a través del window.opener.

De todos modos, hay muchas otras opciones para comunicarse entre dos ventanas en el mismo dominio. Creo que los dos siguientes son los más fáciles de poner en práctica:

  1. Uso localStorage. Si almacena algunos datos con alguna clave en localStorage en la nueva ventana de pestañas, la ventana de apertura recibirá un evento de almacenamiento. Si detecta el evento con un controlador, puede leer los datos de localStorage que escribió desde la nueva ventana de pestañas. Tenga en cuenta que los eventos se activan solo si ambas páginas están en el mismo dominio, y si en realidad hay dos ventanas en cuestión (los eventos no se activan dentro de la misma ventana que escribió los datos). Para obtener más información sobre cómo hacer esto, consulte por ejemplo: http://diveintohtml5.info/storage.html

  2. Use Trabajadores web compartidos. Un trabajador web es un script JS que se ejecuta en segundo plano en un hilo separado. Los trabajadores web compartidos son un tipo especial de trabajadores de la Web que permiten que cualquier número de documentos de los padres se comunique con un solo trabajador. Por lo tanto, podría usar el trabajador para retransmitir mensajes entre la ventana de apertura y la nueva ventana de pestaña. La API para comunicarse con un trabajador es muy similar a la API postMessage. Para obtener más información sobre cómo hacerlo, consulte, por ejemplo: http://www.sitepoint.com/javascript-shared-web-workers-html5/.

Cuestiones relacionadas