Jak zapobiec opuszczaniu strony internetowej za pomocą JavaScript?
javascript
onbeforeunload
Entuzjastyczne oprogramowanie
źródło
źródło
Odpowiedzi:
Używanie
onunload
pozwala na wyświetlanie komunikatów, ale nie przerywa nawigacji (bo jest już za późno). Jednak użycieonbeforeunload
spowoduje przerwanie nawigacji:Uwaga: zwracany jest pusty ciąg, ponieważ nowsze przeglądarki wyświetlają komunikat, taki jak „Wszelkie niezapisane zmiany zostaną utracone”, którego nie można zastąpić.
W starszych przeglądarkach można określić komunikat do wyświetlenia w monicie:
źródło
window.onbeforeunload = function() { return ""; }
W przeciwieństwie do innych przedstawionych tutaj metod, ten fragment kodu nie będzie spowoduje, że przeglądarka wyświetli ostrzeżenie z pytaniem, czy użytkownik chce wyjść; zamiast tego wykorzystuje zdarzeniową naturę DOM do przekierowania z powrotem do bieżącej strony (i tym samym anulowania nawigacji), zanim przeglądarka będzie miała szansę wyładować go z pamięci.
Ponieważ działa poprzez bezpośrednie zwieranie nawigacji, nie można go używać do zapobiegania zamknięciu strony; jednak można go użyć do wyłączenia funkcji omijania ramek.
Zastrzeżenie: Nigdy nie powinieneś tego robić. Jeśli strona zawiera kod niszczący ramki, uszanuj życzenia autora.
źródło
Skończyło się na tej nieco innej wersji:
W innym miejscu ustawiam flagę dirty na true, gdy formularz jest zanieczyszczony (lub w inny sposób chcę uniemożliwić nawigację). Dzięki temu mogę łatwo kontrolować, czy użytkownik otrzyma monit Potwierdź nawigację.
Wraz z tekstem w wybranej odpowiedzi zobaczysz zbędne monity:
źródło
undefined
zamiast zerowej. (1) jest warunkowa (2) wymienia „brudny”, najczęstszy uzasadniony powód utrudniania nawigacji i (3) ma zrzut ekranu.Odpowiednik w bardziej nowoczesny i zgodny z przeglądarkami sposób, przy użyciu nowoczesnych interfejsów API addEventListener.
Źródło: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload
źródło
event.returnValue
W przykładzie Aymana zwracając wartość false, zapobiegasz zamknięciu okna / karty przeglądarki.
źródło
Odpowiednik zaakceptowanej odpowiedzi w jQuery 1.11:
Przykład JSFiddle
Odpowiedź altCognito wykorzystała
unload
zdarzenie, które następuje za późno, aby JavaScript przerwał nawigację.źródło
Użyj onunload .
Myślę, że w przypadku jQuery działa to tak:
źródło
unload
zdarzenie uruchamia się, gdy użytkownik opuszcza stronę, w przeciwieństwie do tego,beforeunload
które uruchamia się tuż przed (i może zostać anulowane)Ten sugerowany komunikat o błędzie może powielić komunikat o błędzie, który jest już wyświetlany w przeglądarce. W chrome, 2 podobne komunikaty o błędach są wyświetlane jeden po drugim w tym samym oknie.
W chrome tekst wyświetlany po niestandardowej wiadomości to: „Czy na pewno chcesz opuścić tę stronę?”. W przeglądarce Firefox w ogóle nie wyświetla naszego niestandardowego komunikatu o błędzie (ale nadal wyświetla okno dialogowe).
Bardziej odpowiednim komunikatem o błędzie może być:
Lub styl stackoverflow: „Zacząłeś pisać lub edytować post”.
źródło
Jeśli łapiesz przycisk wstecz / dalej w przeglądarce i nie chcesz opuszczać przeglądarki, możesz użyć:
W przeciwnym razie możesz użyć zdarzenia beforeunload , ale komunikat może, ale nie musi, działać w różnych przeglądarkach i wymaga zwrócenia czegoś, co wymusza wbudowany monit.
źródło