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:
- Strony nie mogą wyświetlać okien dialogowych z żadnym tekstem. Witryna może poprosić przeglądarkę o wyświetlenie okna dialogowego z niestandardowym tekstem, ale przeglądarka może go całkowicie zignorować (Opera), użyć tekstu ogólnego (Firefox) lub wyraźnie powiedzieć, co się stanie (Chrome, IE).
- Szczegóły okna dialogowego zależą od używanej przeglądarki, ale przyciski są zawsze niezmienne. Jeśli nie powie jednoznacznie, który z nich co robi, wówczas OK oznacza „opuść tę stronę *, a Cancel oznacza„ zostań tutaj ”.
- Strony internetowe nie mogą wykonywać żadnych złośliwych działań, jeśli zdecydujesz się je opuścić. Twoje pliki nie zostaną zastąpione filmami z kotami, nie zostaniesz zalany 135234 wirusami, a FBI nie zostanie poinformowane, że masz nielegalne oprogramowanie na swoim komputerze.
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)
javascript:var x=document.createElement('script');x.type='text/javascript';x.innerHTML='onbeforeunload=function(){};';document.body.appendChild(x);
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:
<html><body onbeforeunload="return 'My custom text.'">_</body></html>
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.
// ==UserScript==
// @name Disable - remove onbeforeunload
// @namespace
// @description Disable - remove the annoying onbeforeunload event
// @include *
// @author netvisiteurs.com
// ==/UserScript==
var x = document.createElement('script');
x.type = 'text/javascript';
x.innerHTML = 'onbeforeunload = function() {};';
document.body.appendChild(x);