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
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/
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!
- 1. Jak mogę zaimplementować funkcję gumki w SVG?
- 2. NSArray. Jak mogę zaimplementować funkcję Map?
- 3. Jak zaimplementować funkcję cofania?
- 4. Jak mogę zaimplementować funkcję pojedynczego logowania w Check_MK?
- 5. Jak mogę zaimplementować funkcję "Odłóż" Apple w ich aplikacji Zegar?
- 6. Jak zaimplementować funkcję ReLU w Numpy
- 7. Jak zaimplementować tę funkcję w Haskell
- 8. Jak zaimplementować funkcję sortowania w widoku siatki?
- 9. Jak zaimplementować funkcję GROWTH w JavaScript
- 10. Jak zaimplementować funkcję "private/restricted" w C?
- 11. Jak zaimplementować funkcję make_unique w C++ 11?
- 12. jak zaimplementować funkcję python `zip` w golangu?
- 13. Jak mogę mieć wielu klientów na serwerze czatów TCP Python?
- 14. Jak poprawnie zaimplementować funkcję ToString dla struktury?
- 15. Jak zaimplementować funkcję "ostatnio widzianą" dla użytkowników?
- 16. Jak zaimplementować siłę hasła, podobnie jak w rejestracji w Gmailu w YII php?
- 17. Schemat DB dla czatów?
- 18. Jak mogę zapobiec zmianie rozmiaru okien Emacsa?
- 19. Jak mogę zaimplementować OutputStream, który mogę przewinąć?
- 20. Jak zaimplementować funkcję cofania/ponawiania w Eclipse FormEditor?
- 21. Jak prawidłowo zaimplementować funkcję "minimize to tray" w Qt?
- 22. Jak mogę zaksięgować wynik na FB/Gmailu/etc?
- 23. W jaki sposób zasady dotyczące domen w domenie działają dla okien wyskakujących, gdy adres URL jest skonfigurowany do uruchamiania JavaScript?
- 24. Jak mogę zaimplementować uniksowy grep w Perlu?
- 25. Jak mogę zaimplementować ten widok w Androidzie
- 26. Jak mogę zaimplementować generator w C++?
- 27. Jak mogę zaimplementować ligaturę znaków w Glifach?
- 28. Jak mogę zaimplementować modularyzację w aplikacji Rails?
- 29. Jak uzyskać pełną treść wiadomości w Gmailu?
- 30. Jak mogę utworzyć funkcję dynamicznie?
Nie słyszałem wcześniej o WindowMsg, muszę to sprawdzić, okrzyki! – ConroyP
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