Niektóre witryny, takie jak StackExchange, wyświetlają komunikat „Czy na pewno chcesz opuścić tę stronę?” okno dialogowe, gdy próbujesz odejść pod pewnymi warunkami, na przykład jeśli masz post, którego edytowanie nie zostało jeszcze ukończone. To jest pomocne!
Niestety, złośliwe lub zainfekowane witryny lubią używać tej samej funkcji, mówiąc: „Hej! Nie zainstalowałeś naszego złośliwego oprogramowania antywirusowego w celu usunięcia 111 wirusów, których zdecydowanie nie kłamiemy na temat znalezienia na twoim komputerze!” Oraz „Zostaw to strona ”i„ Pozostań na tej stronie ”opcje zostały zastąpione przez„ Bądź bezpieczny. Zainstaluj nasz produkt ”i„ Zastrzel się w nogę ”. To nie jest pomocne!
JavaScript potrafi robić paskudne rzeczy. Kiedy otrzymam jedno z tych okien dialogowych, które próbują powstrzymać mnie przed opuszczeniem wyraźnie złośliwej witryny, jaka powinna być moja odpowiedź? Czy bezpiecznie jest kliknąć „Opuść tę stronę” lub cokolwiek, na co zastąpili tekst? Czy witryna może zmienić zachowanie przycisku lub przechwycić moją próbę nawigowania i narysować własne fałszywe okno dialogowe, które robi wszystko, co chce atakujący, gdy kliknę na niego?
Odpowiedzi:
Pomimo tego, co mówią niektóre z tych okien dialogowych, nie mogą zrobić nic złośliwego . Zawsze możesz kliknąć OK lub Opuść stronę, aby zamknąć niepoprawną stronę bez żadnych konsekwencji.
Jeśli okno dialogowe jest zbyt długie, a przyciski są poza ekranem , możesz nacisnąć,Enter aby potwierdzić zamknięcie strony.
Jeśli nie masz klawiatury (urządzenia z ekranem dotykowym), skorzystaj z bookmarkletu poniżej lub zobacz odpowiedź SimpleSimon (tylko Chrome).
Teraz kilka szczegółów.
Jest tylko jeden sposób na wykonanie akcji, gdy strona się zamyka: poprzez
onbeforeunload
zdarzenie. Oczywiście można tego łatwo użyć przeciwko użytkownikowi (na przykład, gdy próbuje zamknąć stronę, otwiera jej kopię w nowym oknie), więc jest bardzo ograniczony.Właściwie jedyną rozsądną rzeczą, jaką możesz zrobić, to otworzyć okno dialogowe z niestandardowym tekstem i dwoma przyciskami, jednym do opuszczenia strony, a drugim do pozostania. Jedyną rzeczą, którą strona może zrobić z tym oknem dialogowym, jest zdefiniowanie tekstu. Przyciski i pasek tytułowy są niezmienne. Oto zrzut ekranu z przeglądarki Firefox 3.6: ( bardzo stara wersja przeglądarki Firefox)
Oczywiście, kiedy pozwalasz ludziom wyświetlać wyskakujące okienka z dowolnym tekstem i tylko przyciskami OK / Anuluj , możesz być pewien, że wcześniej czy później niektórzy faceci użyją go przeciwko tobie.
Na powyższym zrzucie ekranu OK oznacza po prostu „Opuść tę stronę”, ale niestandardowy opis sugeruje coś więcej. Dlatego przeglądarki zmieniły okna dialogowe, dlatego trudniej jest wprowadzić je w błąd. Na przykład ostatnie wersje Firefoksa wydają się ignorować niestandardowy tekst:
Chrome wyświetla niestandardowy tekst, ale zawsze dołącza pytanie z pytaniem, co chce zrobić, a przyciski wyraźnie określają jego działania: (ale nadal jest podatny na komunikaty „kocich filmów”!)
Oto Internet Explorer 10, również „podatny na kota”:
Opera 12 po prostu ignoruje
onbeforeunload
zdarzenie, a jeśli spróbujesz zamknąć taką kartę, zamknie się ona tak jak każda inna. Jednak nie testowałem najnowszej Opery.Podsumowując najważniejsze rzeczy:
Możesz wyłączyć
onbeforeunload
zdarzenie, jeśli chcesz, skutecznie uniemożliwiając stronom proszenie o opuszczenie lub pozostanie. Oto skrypt użytkownika dla różnych przeglądarek . (przewiń w dół, jeśli link nie działa)Jeśli korzystasz z konkretnej witryny, która wyświetla złośliwe okienko wyskakujące i nadal boisz się kliknąć przycisk Opuść , możesz utworzyć skryptozakładkę, aby ją usunąć. Kliknij pasek zakładek prawym przyciskiem myszy, wybierz opcję Nowa zakładka (lub jej odpowiednik) i wklej to jako adres URL: (to tylko zminimalizowany kod z powyższego linku)
Następnie po prostu kliknij tę zakładkę, a wyskakujące okienko zostanie tymczasowo usunięte z aktywnej strony.
Jeśli chcesz przetestować wyskakujące okienka w przeglądarce lub przetestować bookmarklet / skrypt użytkownika, utwórz plik tekstowy z następującym kodem i zapisz go jako
.html
plik:Wygląda na to, że link skryptu użytkownika jest teraz martwy, więc oto kopia wyodrębniona z pamięci podręcznej archive.org . Podziękowania dla oryginalnego twórcy skryptu.
źródło
W rzeczywistości FireFox ma dość sprytne (i łatwe) rozwiązanie. Jeśli wpiszesz
do paska adresu, a następnie przewiń w dół do
i po ustawieniu jego wartości na True, nie będzie już wyświetlane wyskakujące okienko opuszczania strony. W FireFox. Szkoda, że nie ma podobnego obejścia w Chrome.
źródło
Najprostszym rozwiązaniem w Chrome jest zawieszenie karty.
Wpisz chrome: // crash w pasek adresu i zapisz jako zakładkę .
Następnym razem, gdy chcesz opuścić taką stronę, po prostu kliknij zakładkę, a ona natychmiast zabije tę kartę, bez wpływu na inne karty. Nie trzeba zabijać całej sesji przeglądarki, jak sugerują niektórzy inni.
Możesz też zawiesić kartę za pomocą chrome: // zawiesić, a następnie po prostu zamknąć kartę bez uruchamiania JavaScript.
Nie jestem pewien, czy jest to możliwe w innych przeglądarkach.
źródło
Jest to zdarzenie window.onbeforeunload i funkcja przeglądarki internetowej. Powinno to być stałe okno dialogowe przeglądarki internetowej. Możesz wypróbować w różnych przeglądarkach, więc możesz zobaczyć, że okna dialogowe mają różne wzory.
Ale zakładam, że możesz stworzyć wyskakujące okienko z javascript, które wygląda bardzo bardzo podobnie do oryginalnego wyskakującego okienka przeglądarki. A jeśli jest to dobry programista, sprawdziłby także typ przeglądarki przed wyświetleniem okna dialogowego. ;)
Aby więc mieć pewność co do oryginalnego okna dialogowego, należy równolegle sprawdzić poprawne okno dialogowe, tj. Tutaj: http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onbeforeunload.htm
Zobacz tutaj, aby uzyskać dodatkowe informacje na temat wydarzenia:
https://developer.mozilla.org/en-US/docs/Web/API/window.onbeforeunload
http://msdn.microsoft.com/en-us/library/ms536907% 28VS.85% 29.aspx
źródło
Szybkie obejście problemu, jeśli nie ufasz oknu wyskakującemu i jego zamiarom / działaniom:
W przypadku Chrome:
Escape, aby usunąć wyskakujące okienko
Kliknij stronę prawym przyciskiem myszy
Wybierz Sprawdź
Przewiń do góry
Kliknij znacznik prawym przyciskiem myszy
Usuń węzeł
Zamknij kartę
Jestem pewien, że inne przeglądarki mają podobne opcje.
źródło