2012-08-24 14 views
6

ho una pagina html (main.html) che apre una nuova scheda nello stesso dominio usando javascript con il metodo window.open ("newtab.html").comunicazione tra la scheda del browser

Nella nuova scheda gli utenti fanno qualcosa che termina la sua attività facendo clic su un pulsante. A questo punto vorrei inviare un messaggio alla finestra di apertura. Ho provato con postMessage ma dalla nuova scheda non posso avere un riferimento all'apri.

Dalla nuova scheda Mi piacerebbe qualcosa di simile, ma non ho "ko"

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

Qual è il modo migliore per inviare il messaggio dalla scheda/finestra secondaria a quella principale (nello stesso dominio)?

vi ringrazio molto Luca

+0

possibile duplicato del [Posso controllare due finestre del browser con un'app HTML5?] (Http://stackoverflow.com/questions/5277482/can-i-control-two-browser-windows-with-one -html5-app) – josh3736

+1

Ehi Luca, non dimenticare di segnare la risposta! Ivan merita i punti di rep. :-) –

+0

Sì, hai ragione :) –

risposta

12

Questo è strano. Aprire una nuova finestra con window.open("newtab.html") dovrebbe dare alla finestra appena aperta la possibilità di fare riferimento all'apertore tramite window.opener.

In ogni caso, ci sono diverse altre opzioni per la comunicazione tra due finestre sullo stesso dominio. Credo che il seguente due sono le più facili da implementare:

  1. Usa localStorage. Se si memorizzano alcuni dati sotto una chiave in localStorage nella nuova finestra della scheda, la finestra di apertura otterrà un evento di archiviazione. Se si cattura l'evento con un gestore, è possibile leggere i dati da localStorage scritti dalla nuova finestra della scheda. Tieni presente che gli eventi vengono attivati ​​solo se entrambe le pagine si trovano nello stesso dominio e se in realtà sono presenti due finestre in questione (gli eventi non vengono attivati ​​all'interno della stessa finestra in cui sono stati scritti i dati). Per ulteriori informazioni su come fare questo - vedi ad esempio: http://diveintohtml5.info/storage.html

  2. Usa lavoratori web condivisi. Un web worker è uno script JS che viene eseguito in background su un thread separato. I web worker condivisi sono un tipo speciale di lavoratori Web che consentono a qualsiasi numero di documenti padre di comunicare con un singolo operatore. Pertanto, è possibile utilizzare l'operatore per inoltrare i messaggi tra la finestra di apertura e la nuova finestra di tabulazione. L'API per comunicare con un lavoratore è molto simile all'API postMessage. Per ulteriori informazioni su come eseguire questa operazione, vedere ad esempio: http://www.sitepoint.com/javascript-shared-web-workers-html5/.

Problemi correlati