Отмена закрытия страницы пользователем

R
На сайте с 08.11.2006
Offline
63
4431

Вопрос "начинающего".

Как с помощью события onUnload отменить попытку закрытия страницы пользователем.

Или на JavaScript это делается как-то по другому?

[umka]
На сайте с 25.05.2008
Offline
456
#1

Подозреваю, что никак, иначе бы всякие умники делали страницы/окошки, которые никак нельзя покинуть/закрыть :)

Лог в помощь!
beaware
На сайте с 26.09.2011
Offline
26
#2

1) onUnload=" alert() ; return true " (или return false, не помню) может сработать.

2) на JS это делается И по-другому, и это "по-другому" считается теоретически более верным

3) часть современных браузеров могут запрещать перехват этого события

4) идеологически, на обрабочик этого события лучше не зависеть и ничего на него не вешать

5) ничего кроме вывода предупреждения-запроса точно ли юзер хочет закрыть страницу где большая форма частично заполнена и не сохранена/отправлена - да/нет? - туда вставлять не стоит

Seoнизаторы всех стран соединяйтесь!
R
На сайте с 08.11.2006
Offline
63
#3

Это да...

Но что делать в ситуации, когда пользователь заполнил некоторую форму, но не "сохранил" ее, а решил уйти со страницы?

Зачем это надо?

Конкретнее:

Ситуация обычная, но не встречал, чтобы кто-то такое делал...

Есть общая база.

Каждый хочет по ней искать, но ленится записывать в нее то, что его интересует.

В принципе, форма его поиска - это уже готовые данные для записи в базу для тех, кто будет искать встречный вариант.

Не хватает только контактных данных.

Соответственно, если бы после поиска при попытке закрыть страницу посетителю предлагали бы ввести контакты для участия в базе, то при его отказе страница бы закрывалась, а при согласии - форма поиска уходила бы в базу, а текущая страница не закрывалась бы, а на ее место загружалась бы форма контактов.

Можно, конечно, обе формы (поиска и контактов) держать на одной странице, но это перегружает страницу лишней (не всегда нужной) информацией...

Можно сохранять форму поиска в файле или еще где-то (она несколько великовата), а при положительном ответе по поводу контактов открывать новое окно с соответствующей формой (мне кажется, что браузеры будут блокировать это как "всплывающее окно" - проверю...)

Может тогда что-нибудь подскажите по самой схеме?

palladin_jedi
На сайте с 13.07.2010
Offline
71
#4

В Gmail это реализовано как-то так:

window.onbeforeunload=function(){return "Кликните 'Отмена' ('Cancel'), чтобы остаться на этой странице";}

Вот тут что-то похожее разбирали.

Сайт о web-разработке и прочем (http://seazo.net)||Продвижение статьями под Google (http://short.seazo.net/ght4zf) Бесплатные консультации рефералам Sape (http://www.sape.ru/r.SWfwWOblBo.php) PHP и JS скрипты на заказ, создание сайтов с нуля и на CMS.
R
На сайте с 08.11.2006
Offline
63
#5

Спасибо

beaware:

2) на JS это делается И по-другому, и это "по-другому" считается теоретически более верным

Не дадите намек?!

beaware:

5) ничего кроме вывода предупреждения-запроса точно ли юзер хочет закрыть страницу где большая форма частично заполнена и не сохранена/отправлена - да/нет? - туда вставлять не стоит

Именно эта ситуация. - Так как надежно оставить страницу вживых, если посетитель сообразит, что нужно задержаться на странице?

С помощью этого?

1) onUnload=" alert() ; return true " (или return false, не помню) может сработать.

rootv добавил 30.10.2011 в 18:11

beaware:
1) onUnload=" alert() ; return true " (или return false, не помню) может сработать.

Что-то в трех браузерах никакие сочетания не помогают... а хром вообще не замечает onUnload=" alert() ;" как будто его и нет...

rootv добавил 30.10.2011 в 18:54

palladin_jedi:
Вот тут что-то похожее разбирали.

Хороший пример, но работает только в IE и хроме...

palladin_jedi
На сайте с 13.07.2010
Offline
71
#6
rootv:
Хороший пример, но работает только в IE и хроме...

Решение есть.

R
На сайте с 08.11.2006
Offline
63
#7

Мда...

Этот вариант для jquery


<script type="text/javascript"> $(document).ready(function(){ $("#myForm").FormNavigate({ message: "Содержимое было изменено!\nВы уверены, что хотите покинуть страницу без сохранения?" }); });</script>

Совсем не работает... (хотя в jquery только и успел понять - как оно подкулючается... но другие примерчики работают, а этот - нет)

Работает только (но кроме Оперы)

<script>window.onbeforeunload = function () {return (is_data_changed ? "Измененные данные не сохранены. Закрыть страницу?" : null);}</script>

Ну и это

<body onbeforeunload="return ('Все данные которые вы ввели будут потеряны')"></body>

- тоже кроме Оперы

rootv добавил 31.10.2011 в 04:50

Вроде бы все прочесал по поиску... если через jquery, то все сводится к

$("YourForm").FormNavigate("YourMessage");

А именно этот код выдает ошибку

$("YourForm").FormNavigate is not a function

???

palladin_jedi
На сайте с 13.07.2010
Offline
71
#8
rootv:
А именно этот код выдает ошибку

FormNavigate подключали?

R
На сайте с 08.11.2006
Offline
63
#9
palladin_jedi:
FormNavigate подключали?

Подключал только jquery.

теперь загрузил и добавил

<script type="text/javascript" src="jquery.FormNavigate-min.js"></script>

1. Старой ошибки не выдает.

2. В Опере - никакой реакции

3. В IE и хроме - вместо сообщения выдает [object Object]

4. В FF спрашивает как положено о желании выйти, но никакого сообщения вообще ни выводит (правда и раньше не выводила)

Вот что работает 100% даже в Опере, так это -

<script>$(document).ready(function(){

$("a").click(function(){

alert("Побудьте еще!");

return false;

});

});

</script>

Но это только для переходов по ссылке...

Буду искать решение дальше...

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий