Nie sądzę, że załadowana została cała strona Facebooka. Każdy link ma własny "cel". Większość z nich pobiera stronę (myślę, że po prostu AJAX), aby pokazać, inni po prostu zmienić niektóre części ekranu. Załóżmy, że masz dwa elementy div. Jeden div to chat-div. Pozycjonowanie stałe i wszystkie, z-index na 100, zawsze będzie na wierzchu. Reszta strony to druga strona div. W ramach tego elementu div można załadować określone strony przy użyciu technologii AJAX bez odświeżania całego ekranu.
Podobnie jak w przypadku ponownego ładowania ekranu: można łatwo zapisać (również w AJAX), czy użytkownik zamknął ekran czatu, czy też go otworzył. Po prostu utwórz tabelę w bazie danych o nazwie "czaty" lub coś w tym stylu, a kiedy otworzy się ekran czatu, umieść wpis w tej tabeli za pomocą "person_1", "person_2" "lastmessage" i "active". Po zamknięciu czatu możesz ustawić "aktywne" pole na fałszywe. Następnie, gdy ktoś ładuje całą witrynę, sprawdza czaty w tabeli w poszukiwaniu aktywnych czatów i pokazuje je, gdy są dostępne.
musisz utrzymywać stan okna na coś. albo plik cookie, sesja lub baza danych (lub dowolna liczba rzeczy). – Shmiddty
Zrobiłbym to za AJAX –
Jeśli ** załadujesz ** stronę przyciskiem przeglądarki, nie "pozostanie otwarta" - zostanie ponownie załadowana wraz ze wszystkim innym na stronie. Wszystko, co robisz przy użyciu interfejsu użytkownika, to po prostu ajax i nie ładuje ponownie strony z serwera, tylko aktualizują sekcje strony, nie dotykając sekcji czatu. –