2008-10-04 13 views
8

Nie szukam pełnej implementacji, jestem bardziej zainteresowany tym, jak to robią. Wiem, że używają GWT, ale chciałbym odpowiedzi na bardziej niski poziom. Naiwnie, zacznę od myślenia, po kliknięciu linka popout one po prostu otworzyć nowe okno i skopiować zawartość do niego. Jest wiele powodów, dla których to nie zadziała, więc zastanawiam się, czy ktoś wie, czy ma pomysły, jak to zrobić lub jak to zrobić.Jak mogę zaimplementować funkcję wyskakujących okien czatów w Gmailu?

Odpowiedz

12

Niedawno musiałem rozwiązać dokładnie ten problem w aplikacji. Skończyło się przy użyciu tego bardzo mały plugin jQuery rade: WindowMsg (patrz link na dole) Choć jestem pewien, że istnieją inne sposoby, aby wykonać to samo zadanie, które wykonuje prace wtyczki thusly:

  • pierwszym utwórz nowe okno potomne z oryginalnego okna za pomocą window.open
  • zapisanie odwołania do obiektu okna zwróconego przez window.open
  • wywołujesz metodę biblioteki w oknie podrzędnym, która dodaje ukryty formularz do biblioteki przechowuj dane w
  • wywołujesz metodę biblioteki w oknie nadrzędnym, która używa window.document.forms do wypełnienia pól formularza przy wygrywaniu dzieci dow (biblioteka streszcza wszystkie te rzeczy, abyś nawet nie wiedział, że jest w to zaangażowana forma, chyba że spojrzałeś na źródło) window.document.forms działa tak samo we wszystkich głównych przeglądarkach, więc ta abstrakcja zgodna z X-browser
  • w końcu okno potomne odwołuje się do swojego okna nadrzędnego za pomocą window.opener i może komunikować się z powrotem za pomocą ukrytego równoległego formularza na rodzicu
  • biblioteka implementuje wygodny helper, który pobiera funkcję wywołania zwrotnego, aby uruchomić po obu stronach, aby utworzyć łańcuch wywołań łatwo sobie poradzić z

Z mojego doświadczenia w pracy z biblioteką byłoby również całkiem fajnie, gdyby zawierały one bibliotekę JSON 2 z JSON.org. Po wyjęciu z pudełka, WindowMsg zezwala tylko na wysyłanie wiadomości tekstowych między oknami, ale z dość prostym wykorzystaniem biblioteki JSON 2, udało mi się zhakować ją, aby umożliwić wysyłanie pełnych obiektów JSON między oknami. Założę się, że bardziej dojrzałe biblioteki (takie jak to, co używa Google) obejmują tego rodzaju serializację i dekretyzację wypiekaną.

Umieszczam ten link tutaj, ponieważ z jakiegoś powodu, formant przepełnienia stosu zamienia go w link kotwicy z brak tagu zamykającego i nie chcę, aby cały mój wpis był jednym gigantycznym hiperłączem!

WindowMsg: http://www.sfpeter.com/2008/03/13/communication-between-browser-windows-with-jquery-my-new-plugin/

+0

Nie słyszałem wcześniej o WindowMsg, muszę to sprawdzić, okrzyki! – ConroyP

+0

Niestety link do ** WindowMsg ** jest zepsuty - czy masz inny, czy możesz dodać mały przykład do swojej odpowiedzi? (tj. próbka kodu) – Matt

1

powiedziałbym najprostszym sposobem byłoby mieć dane przechowywane na serwerze (które prawdopodobnie już zrobić), to po prostu nowe okno pobierania tych danych.

Oczywiście nie utrzymałoby to takich rzeczy, jak zawartość pola tekstowego wprowadzonego przez użytkownika, więc w zależności od tego, do czego służy okno, może być niepraktyczne .. ale zawsze najlepiej jest zacząć od najprostszej opcji!

Powiązane problemy