Несмотря на то, что говорится в некоторых из этих диалогов, они не могут сделать ничего плохого . Вы всегда можете нажать кнопку « ОК» или « Покинуть страницу», чтобы закрыть нарушающую страницу без каких-либо последствий.
Если диалоговое окно слишком длинное и кнопки находятся за пределами экрана , вы можете нажать,Enter чтобы подтвердить закрытие страницы.
Если у вас нет клавиатуры (устройства с сенсорным экраном), используйте букмарклет ниже или посмотрите ответ SimpleSimon (только Chrome).
Теперь некоторые подробности.
Есть только один способ выполнить какое-либо действие при закрытии страницы: через onbeforeunload
событие. Конечно, это может быть легко использовано против пользователя (например, когда он пытается закрыть страницу, он открывает свою копию в новом окне), поэтому он очень ограничен.
На самом деле единственная разумная вещь, которую вы можете сделать, - это открыть диалоговое окно с пользовательским текстом и двумя кнопками, одна из которых покинет страницу, а другая - остаться. Единственное, что страница может сделать с этим диалогом, это определить его текст. Кнопки и заголовок неизменны. Вот скриншот из Firefox 3.6: ( очень старая версия Firefox)
Конечно, когда вы позволяете людям показывать всплывающие окна с любым текстом и просто нажимаете кнопку «ОК / Отмена» , вы можете быть уверены, что рано или поздно некоторые парни будут использовать его против вас.
На приведенном выше снимке экрана « ОК» означает просто «Покинуть эту страницу», но пользовательское описание предполагает нечто большее. Таким образом, браузеры изменили диалоги, поэтому их сложнее ввести в заблуждение. Например, последние версии Firefox, кажется, игнорируют пользовательский текст:
Chrome показывает пользовательский текст, но всегда добавляет вопрос, спрашивающий пользователя, что он хочет сделать, и кнопки явно указывают свои действия: (но он по-прежнему подвержен сообщениям "cat videos"!)
Вот Internet Explorer 10, также «склонный к кошкам»:
Opera 12 просто игнорирует onbeforeunload
событие, и если вы попытаетесь закрыть вкладку таким образом, она закроется, как и любая другая. Впрочем, я не тестировал последнюю Opera.
Итак, подведем итог самым важным вещам:
- Страницы не могут отображать диалоги с любым текстом. Веб-сайт может попросить браузер показать диалог с пользовательским текстом, но браузер может полностью его игнорировать (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);
Затем просто нажмите на эту закладку, и всплывающее окно будет временно удалено с активной страницы.
Если вы хотите проверить, как эти всплывающие окна выглядят в вашем браузере, или протестировать букмарклет / скрипт пользователя, создайте текстовый файл со следующим кодом и сохраните его в виде .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);