Daniel Wojciechowski

Daniel Wojciechowski Skład DTP, Grafik,
Nowe 7 Dni Gryfina

Temat: Przechwycenie zdarzenia zamknięcia okna

Witajcie.

Sprawa prosta, potrzebuję przechwycić event gdy okienko popup zostanie zamknięte. Kolejno:

- Użytkownik klika w przycisk, pojawia się okno (okno ma inny url)
- wykonuje w nim operacje (logowanie)
- okno zamykane jest już wewnątrz tego okna przez js-a
- strona z przyciskiem do otworzenia tego okna popup powinna w tym momencie odnotować to zdarzenie i wykonać dalsze operacje. Dobrze by było gdyby mogła pobrać z tego okna jakieś dane

Najbliższy przykład tego co chce wykonać to 'facebook connect'. klikamy zaloguj, pojawia się popup, logujemy się do fb, okno się zamyka a strona się przeładowuje.

onbeforeunload działa chyba tylko dla danego okna, a ja potrzebuję żeby 'coś' monitorowało stan otwarcia tego popup.Daniel Wojciechowski edytował(a) ten post dnia 16.12.12 o godzinie 10:55

konto usunięte

Temat: Przechwycenie zdarzenia zamknięcia okna

To nie do końca odpowiedź na twoje pytanie, ale czy zamiast oddzielnego okna nie lepiej "zasymulować" sobie okienko jakimś boxem umieszczonym "nad" stroną?

Rozwiązałoby to kilka problemów:
- popupy są mega denerwujące
- co zrobić z popupem kiedy user zamknie najpierw główną stronę
- komunikacja strona - popup
- popup na mobilach jest trudniejszy do wykonania poprawnie (IMHO)

Są oczywiście gotowce np. jQuery UI DialogKrzysztof Kawa edytował(a) ten post dnia 16.12.12 o godzinie 11:26
Daniel Wojciechowski

Daniel Wojciechowski Skład DTP, Grafik,
Nowe 7 Dni Gryfina

Temat: Przechwycenie zdarzenia zamknięcia okna

Jestem tylko ciekaw dlaczego FB wybrało właśnie ten sposób. Chyba zasugeruję się Twoim rozwiązaniem, gdyż docelowo chcę tylko wykonać logowanie, jednak formularz jak i autoryzacja będą na inną domenę (właśnie to a'la FB), czyli pozostaje to zrobić po ajax-ie. Gdyby jednak ktoś chciał dorzucić info dlaczego facebook tak to rozegrał byłbym wdzięczny.
Sławomir Jach

Sławomir Jach Programista,
DreamLab

Temat: Przechwycenie zdarzenia zamknięcia okna

FB wybrał taki sposób z wielu powodów np. jak masz plugin komentarze i jesteś niezalogowany na facebooku, okienko jakie Ci się pokaże będzie na sslu, a gdy użyjesz np. html5 do wstawienia tego pluginu sprawy się komplikują.
Grzegorz K.

Grzegorz K. Angular, JavaScript,
Frontend, UI

konto usunięte

Temat: Przechwycenie zdarzenia zamknięcia okna

Jeśli dobrze rozumiem to chodzi o zdarzenie zamknięcia okna lub okna z pojedynczą zakładką w przeglądarce internetowej.

Najwygodniej będzie rzeczywiście skorzystać z funkcji $(window).onunload() oraz $(window).onbeforeunload(), ale tylko kiedy masz otwartą jedną zakładkę w oknie. To ważne, czyli np. Twitter działa.

Jeśli to nie wypali to polecam sprawdzić najbardziej oczywisty $(window).unload() w połączeniu z preventdefault(), który powinien załatwić sprawę.Błażej K. edytował(a) ten post dnia 19.12.12 o godzinie 09:46
Mirosław Ratman

Mirosław Ratman Manager IT,
Architekt systemów
@Avast, Founder
@aSyncro ...

Temat: Przechwycenie zdarzenia zamknięcia okna

A nie lepiej, prościej i bezpieczniej zmienić popup na floated DIV i obsługiwać ooClick ??

konto usunięte

Temat: Przechwycenie zdarzenia zamknięcia okna

Mirosław R.:
A nie lepiej, prościej i bezpieczniej zmienić popup na floated DIV i obsługiwać onClick ??

To najprostsze rozwiązanie na pewno, ale autor nie rozpisał szczegółów tego co robi zbyt dokładnie, więc napisałem co powinno zadziałać moim zdaniem.Błażej K. edytował(a) ten post dnia 19.12.12 o godzinie 14:10
Mirosław Ratman

Mirosław Ratman Manager IT,
Architekt systemów
@Avast, Founder
@aSyncro ...

Temat: Przechwycenie zdarzenia zamknięcia okna

Nie jest dobre naprawianie "trików" trikami ;)

konto usunięte

Temat: Przechwycenie zdarzenia zamknięcia okna

Ale to okienko ma dać znać, że się zamyka jak użytkownik kliknie na krzyżyk, czy jak kliknie w nim na jakiegoś buttona? Jeżeli na buttona, to można by wysłać przy jego kliknięciu info do drugiego okna za pomocą postMessage a potem je zamknąć ale nie będzie to chyba działać w IE (bo tam postMessage działa chyba tylko dla iframe, a w IE7 nie działa w ogóle). Jeżeli ma to działać też przy zamknięciu tego okienka za pomocą krzyżyka to można by wysyłać to info po wykryciu eventa onbeforeunload - ale to z kolei nie działa w operze (więc nie będzie działać w ie i operze...).
Daniel Wojciechowski

Daniel Wojciechowski Skład DTP, Grafik,
Nowe 7 Dni Gryfina

Temat: Przechwycenie zdarzenia zamknięcia okna

Celem projektu jest wykonanie dokładnie tego samego co robi facebook. W okienku popup pojawia się inna strona (po ssl-u), w tym oknie następuje logowanie i gdy strona w popupie "stwierdzi" że udało się zalogować, po prostu zamyka okno co by nie wisiało (js-em zamyka to okno) i w przypadku witryn, które mają integrację z fb, następuje wtedy przekierowanie (odświeżenie) i użytkownik już jest zalogowany. Chcę to odtworzyć.

konto usunięte

Temat: Przechwycenie zdarzenia zamknięcia okna

http://stackoverflow.com/questions/9388380/capture-the... - może to pomoże? Tyle, że wtedy to co się wyświetla w okienku musi być w tej samej domenie co cała strona.
Daniel Wojciechowski

Daniel Wojciechowski Skład DTP, Grafik,
Nowe 7 Dni Gryfina

Temat: Przechwycenie zdarzenia zamknięcia okna

był to jeden z pierwszych postów jakie znalazłem, i niestety ale zawsze będzie to inna domena. Zawsze ta sama jednak inna niż witryna w której nastąpił klik. Trochę nie chce mi się wierzyć że facebook zrobił coś czego nikt dotąd nie wykonał. Czy pomysł na odpytywanie w tle danej witryny będzie dobrym kierunkiem? Przypuśćmy sytuację, osoba klika w przycisk, zaczyna się odpytywanie w tle o status (powiedzmy co 5 sekund), pojawia się okno popup z moją witryną. Użytkownik wykonuje logowanie się do serwisu, zaś okno natychmiast po zalogowaniu się zostaje zamknięte i najpóźniej w ciągu 5 sekund następuje przekierowanie, gdyż odpytanie zwraca w tym momencie true. Widzę tutaj dość mocne obciążenie serwera odpytywanego, gdy przypuśćmy z kilku serwisów będzie wykonywane takie zapytanie. Czy jest to optymalne rozwiązanie?Daniel Wojciechowski edytował(a) ten post dnia 30.12.12 o godzinie 15:15

konto usunięte

Temat: Przechwycenie zdarzenia zamknięcia okna

Facebook wykorzystuje oauth. Nie jest to nic nowego ani nadzwyczajnego.

Co możesz zrobić żeby nie uruchamiać całej machinerii: otwierasz popup ze stroną http://mojserwerlogowania.com?usertoken=jakisrandomtoken. Popup uwierzytelnia usera jak tam sobie chcesz i zapisuje gdzieś rozpoczętą sesję z tym numerem. W tym czasie twoja strona wysyła zapytanie do serwera pytając o sesję z tym samym random tokenem. Nie musisz tego robić cyklicznie, wykorzystaj np. long polling (wygooglaj, opisów jest masa). Jako odpowiedź na takie zapytanie wysyłasz już konkretny, wygenerowany przez serwer session id czy dane usera czy co tam sobie chcesz, a random token unieważniasz.

Oczywiście nie jest to 100% bezpieczne, ale zawsze możesz tu walnąć jakiś https albo zebrać trochę informacji z przeglądarki i powiązać je na moment logowania z sesją. Bezpieczne uwierzytelnianie to raczej temat na inny wątek.
Marcin K.

Marcin K. Software Engineer,
Samsung Poland R&D
Center

Temat: Przechwycenie zdarzenia zamknięcia okna

Daniel Wojciechowski:
Jestem tylko ciekaw dlaczego FB wybrało właśnie ten sposób. Chyba zasugeruję się Twoim rozwiązaniem, gdyż docelowo chcę tylko wykonać logowanie, jednak formularz jak i autoryzacja będą na inną domenę (właśnie to a'la FB), czyli pozostaje to zrobić po ajax-ie. Gdyby jednak ktoś chciał dorzucić info dlaczego facebook tak to rozegrał byłbym wdzięczny.

Dlatego, że gdyby nie otwierał nowego okna to natrafiłby na problem third party cookies, które w wielu przeglądarkach są blokowane.
Daniel Wojciechowski

Daniel Wojciechowski Skład DTP, Grafik,
Nowe 7 Dni Gryfina

Temat: Przechwycenie zdarzenia zamknięcia okna

oauth i long polling bardzo przydatne wskazówki, zatem zabieram się powoli do pracy. Cookies 3rd party też cenna informacja, dzięki Wam bardzo za zaangażowanie



Wyślij zaproszenie do