2012-08-24 21 views
6

Mam stronę html (main.html) otwierającą nową kartę w tej samej domenie przy użyciu javascript za pomocą metody window.open ("newtab.html").komunikacja między kartą przeglądarki

W nowej zakładce użytkownicy robią coś, co kończy jego działanie, klikając przycisk. W tym miejscu chciałbym wysłać wiadomość do okna otwieracza. Próbowałem z postMessage, ale z nowej zakładki nie mogę mieć odniesienia do otwieracza.

Od nowej karcie Chciałbym coś podobnego, ale mam „ko”

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

Jaki jest najlepszy sposób, aby wysłać wiadomość z zakładki/okna wtórnego do jednej głównej (w tej samej domenie)?

dziękuję bardzo Luca

+0

możliwe duplikat [Mogę kontrolować dwa okna przeglądarki z jednej aplikacji HTML5?] (Http://stackoverflow.com/questions/5277482/can-i-control-two-browser-windows-with-one -html5-app) – josh3736

+1

Hej Luca, nie zapomnij zaznaczyć odpowiedzi! Ivan zasługuje na punkty rep. :-) –

+0

Tak, masz rację :) –

Odpowiedz

12

To jest dziwne. Otwarcie nowego okna z numerem window.open("newtab.html") powinno dać nowo otwartemu oknu możliwość odwołania się do otwieracza poprzez window.opener.

W każdym razie istnieje kilka innych opcji komunikacji między dwoma oknami w tej samej domenie. Myślę, że po dwa są najłatwiejsze do wdrożenia:

  1. Zastosowanie localStorage. Jeśli przechowujesz niektóre dane pod jakimś kluczem do localStorage w oknie nowej zakładki, to okno otwieracza dostanie zdarzenie magazynowe. Jeśli przechwycisz zdarzenie za pomocą modułu obsługi, możesz odczytać dane z localStorage napisane w oknie nowej karty. Zwróć uwagę, że zdarzenia są uruchamiane tylko wtedy, gdy obie strony znajdują się w tej samej domenie i jeśli faktycznie istnieją dwa okna, o których mowa (zdarzenia nie są uruchamiane w tym samym oknie, w którym zapisano dane). Aby uzyskać więcej informacji o tym, jak to zrobić - zobacz na przykład: http://diveintohtml5.info/storage.html

  2. Użyj udostępnionych pracowników WWW. Robot WWW to skrypt JS, który jest wykonywany w tle w osobnym wątku. Współużytkowani pracownicy sieciowi to specjalny rodzaj pracowników sieci Web, którzy pozwalają dowolnej liczbie dokumentów nadrzędnych na komunikację z jednym pracownikiem. Tak więc można użyć pracownika do przekazywania komunikatów między oknem otwieracza a oknem nowej karty. Interfejs API do komunikacji z pracownikami jest bardzo podobny do API postMessage. Aby uzyskać więcej informacji, jak to zrobić - patrz na przykład: http://www.sitepoint.com/javascript-shared-web-workers-html5/.

Powiązane problemy