Несмотря на то, что некоторые из этих диалогов говорят, что они не могут сделать что-нибудь вредоносное. Вы всегда можете нажать кнопку « ОК» или « Покинуть страницу», чтобы без проблем закрыть страницу, которая вас обидела.
Если диалоговое окно слишком длинное и кнопки находятся за пределами экрана, вы можете нажать Enter, чтобы подтвердить закрытие страницы.
Если у вас нет клавиатуры (устройства с сенсорным экраном), используйте букмарклет ниже или посмотрите ответ SimpleSimon (только Chrome).
Теперь некоторые подробности.
Есть только один способ выполнить какое-либо действие при закрытии страницы: через событие onbeforeunload
. Конечно, это может быть легко использовано против пользователя (например, когда он пытается закрыть страницу, он открывает свою копию в новом окне), поэтому он очень ограничен.
На самом деле единственная разумная вещь, которую вы можете сделать, это открыть диалоговое окно с пользовательским текстом и двумя кнопками, одна из которых покинет страницу, а другая - остаться. Единственное, что страница может сделать с этим диалогом, это определить его текст. Кнопки и заголовок неизменны. Вот скриншот из Firefox 3.6: (очень старая версия Firefox)
Конечно, когда вы позволяете людям показывать всплывающие окна с любым текстом и просто нажимаете кнопку ОК / Отмена , вы можете быть уверены, что рано или поздно некоторые парни будут использовать его против вас.
На приведенном выше снимке экрана « ОК» означает просто "Покинуть эту страницу", но пользовательское описание предполагает нечто большее. Таким образом, браузеры изменили диалоги, поэтому их сложнее ввести в заблуждение. Например, последние версии Firefox, кажется, игнорируют пользовательский текст:
Chrome показывает пользовательский текст, но всегда добавляет вопрос, спрашивающий пользователя, что он хочет сделать, и кнопки явно указывают свои действия: (но он по-прежнему подвержен сообщениям "cat videos"!)
Вот Internet Explorer 10, также «склонный к кошкам»:
Opera 12 просто игнорирует событие onbeforeunload
и если вы попытаетесь закрыть такую вкладку, она закроется, как и любая другая. Впрочем, я не тестировал последнюю оперу.
Итак, подведем итог самым важным вещам:
- Страницы не могут отображать диалоги с любым текстом. Веб-сайт может попросить браузер показать диалог с пользовательским текстом, но браузер может полностью его игнорировать (Opera), использовать общий текст (Firefox) или явно сказать, что произойдет (Chrome, IE).
- Детали диалога зависят от браузера, который вы используете, но кнопки всегда неизменны. Если они не скажут явно, кто что делает, тогда OK означает «покинуть эту страницу *, а Отмена -" остаться здесь ".
- Сайты не могут совершать какие-либо вредоносные действия, если вы решите их покинуть. Ваши файлы не будут заменены видео с кошками, вы не будете залиты 135234 вирусами и ФБР не будет проинформировано о том, что на вашем компьютере установлено нелегальное программное обеспечение.
Вы можете отключить событие onbeforeunload
если хотите, эффективно не давая страницам просить вас покинуть или остаться. Вот кроссбраузерный пользовательский скрипт. (прокрутите вниз, если ссылка не работает)
Если вы находитесь на определенном веб-сайте с вредоносным всплывающим окном и все еще боитесь нажать « Выйти», вы можете создать букмарклет для его удаления. Щелкните правой кнопкой мыши на панели закладок, выберите « Новая закладка» (или эквивалент) и вставьте ее в виде URL-адреса: (это всего лишь мини-код из приведенной выше ссылки)
javascript:var x=document.createElement('script');x.type='text/javascript';x.innerHTML='onbeforeunload=function(){};';document.body.appendChild(x);
Затем просто нажмите на эту закладку, и всплывающее окно будет временно удалено с активной страницы.
Если вы хотите проверить, как эти всплывающие окна выглядят в вашем браузере, или протестировать букмарклет /userscript, создайте текстовый файл со следующим кодом и сохраните его как файл .html
:
<html><body onbeforeunload="return 'My custom text.'">_</body></html>
Кажется, что ссылка на пользовательский скрипт сейчас мертва, так что вот копия, извлеченная из кэша archive.org. Вся заслуга оригинального создателя сценария.
// ==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);