Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: onbeforeunload
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
olo707
Witam,

Mam dwa pytanie odnośnie metody jQuery onbeforeunload

Czy jest możliwość wykonania jakiegoś działania przy tej metodzie bez pojawienia się wiadomości (domyślnego prompta) ?
Czy jest możliwość wykrycia, w który przycisk kliknął użytkownik podczas pojawienia się prompta (czy opuszcza stronę lub czy zostaje na stronie) ?
Comandeer
Cytat
Mam dwa pytanie odnośnie metody jQuery onbeforeunload

Zacznijmy od tego, że to nie metoda i nie od jQuery wink.gif beforeunload to zdarzenie zachodzące przed zamknięciem strony, natomiast onbeforeunload brzmi jak sposób podpięcie handlera do niego. Pewnie w jQuery jest do tego plugin – jak to ze wszystkim.
Cytat
Czy jest możliwość wykonania jakiegoś działania przy tej metodzie bez pojawienia się wiadomości (domyślnego prompta) ?

Problem polega na tym, że działanie tego zdarzenia jest skrajnie niespójne w różnych przeglądarkach i np w lisku AFAIR nie działa to, co jako jedyne działa w Chrome (i vice versa).
Cytat
Czy jest możliwość wykrycia, w który przycisk kliknął użytkownik podczas pojawienia się prompta (czy opuszcza stronę lub czy zostaje na stronie) ?

Prosty deal: jeśli strona dalej jest widoczna, to znaczy, że został. Jeśli nie… no wiadomo wink.gif
Pyton_000
Wystarczy sprawdzić czy link kieruje do domeny tej samej czy nie i tyle.
olo707
nie bardzo rozumiem
Pyton_000
Prawdzasz href linku. Jeśli domena z href jest == domena serwisu lub nie ma domeny to znaczy że przechodzi między stronami, jeśli link ma inną domenę niż obecna serwisu znaczy że ucieka.
Comandeer
@Pyton_000 tu chyba chodzi o to, w jaki przycisk w okienku confirm pacnął user – w "Leave page" czy "Stay on page".
com
wyciszyć domyślne i dać swoje i po problemie wink.gif
Comandeer
@com problem polega na tym, że nie działa wink.gif
com
co nie działa?
Comandeer
Blokowanie domyślnego zdarzenia… Zawsze był problem z tym w wypadku beforeunload i nic się w tym zakresie nie zmieniło. W Chrome de facto działa jedynie taka bezsensowna konstrukcja:
Kod
window.addEventListener( 'beforeunload', function( e ) {
    e.returnValue = 'Pytanie';
} );

co sprowadza się do wyświetlania okienka confirm.
com
nwm u mnie
[JAVASCRIPT] pobierz, plaintext
  1. window.onbeforeunload = function(event)
  2. {
  3. // whatever
  4. };
[JAVASCRIPT] pobierz, plaintext

Działa i confirm nie mam smile.gif
Comandeer
Ok, ale nie wszystkie działania da się tak zrobić, niestety, np.
Cytat
Blocked alert('a') during beforeunload.

Dlatego nigdy nie ma pewności, że to, co chcemy, się wykona.
com
no owszem zgadzam się smile.gif ja sobie tam zapisuje token do localstorage i działa biggrin.gif
olo707
Chciałem przy onbeforeunload za pomocą funkcji $.ajax wykonać jakieś działanie tylko jeśli użytkownik faktycznie wyjdzie ze strony czyli kliknie opuść stronę i nie mogę tego wykonać.
com
no bo tak to sie raczej nie da, nie do tego to służy.
olo707
a znasz jakiś sposób by wykonać tą akcję jeśli użytkownik opuści stronę przez jej skasowanie lub reload
Comandeer
A Ty nie chcesz przypadkiem tego zrobić przy zdarzeniu unload?

Do tego stworzono wręcz osobne API biggrin.gif https://developer.mozilla.org/en-US/docs/We...ator/sendBeacon
olo707
słabo ze wsparciem tej funkcjonalności w przeglądarkach
Comandeer
Beacona tak, ale unload jest wspierany praktycznie wszędzie.
olo707
nie wiem czemu u mnie nie działa onload
com
bo nie on a unload smile.gif
olo707
nie wiem czemu to nie działa dodając to przy tagu body działa onload ale nie unload
Comandeer
Ale tutaj nikt nie mówił o dodawaniu czegokolwiek do tagów! Jeśli chcesz to zrobić w HTML-u, to raczej onunload. Niemniej zdarzenia się powinno przypinać w JS.
olo707
osiągnąłem ta funkcjonalność dzięki window.addEventListener("unload", myFunction); lub window.onunload=function(){myFunction();}; Macie jakiś pomysł jak zapobiec wykonywaniu tej akcji jeśli np dane z formularza na stronie zostały przesłane lub klikne np w jakiś link
Comandeer
Ustaw se jakąś flagę.
olo707
nie bardzo wiem jak to zrobić
Comandeer
Flaga = zmienna globalna. Po prostu przy wysyłaniu formularza lub kliku na link, wrzuć do jakiejś zmiennej globalnej true i w unload sprawdź, czy ma ustawioną wartość.
olo707
to akurat wiem ale myślałem że chodzi Ci o
callbacks
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.