Как заблокировать пользователей от закрытия окна в JavaScript? - PullRequest
42 голосов
/ 09 февраля 2010

Можно ли запретить пользователям закрывать окно с помощью кнопки выхода [X]? На самом деле я предоставляю кнопку закрытия на странице, чтобы пользователи закрывали окно. В основном, я пытаюсь заставить пользователей заполнить форму и отправить ее. .

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

Ответы [ 8 ]

86 голосов
/ 09 февраля 2010

Взгляните на onBeforeUnload.

Это не заставит кого-то остаться, но заставит его спросить, действительно ли они хотят уйти, что, вероятно, является лучшим кросс-браузерным решением, которым вы можете управлять. (Аналогично этому сайту, если вы пытаетесь оставить средний ответ.)

<script language="JavaScript">
    window.onbeforeunload = confirmExit;
    function confirmExit() {
        return "You have attempted to leave this page. Are you sure?";
    }
</script>

Редактировать: большинство браузеров больше не разрешают настраиваемое сообщение для onbeforeunload.

См. сообщение об ошибке от 18 февраля 2016 г.

Диалоги onbeforeunload используются в Modern Web для двух вещей:
1. Предотвращение случайной потери данных пользователями.
2. Мошенничество с пользователями.

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

Firefox уже делает это [...]

8 голосов
/ 09 февраля 2010

Что вы будете делать, когда пользователь нажмет ALT + F4 или закроет его из диспетчера задач

Почему бы вам не отследить, если они не заполнили его в файле cookie или в БД, и когда они зайдут в следующий раз, просто верните тот же экран ...: Кстати ... вы еще не закончили заполнять эту форму ... "

Конечно, если вы были вокруг, прежде чем доткомов бюст вы помните порно штормы, где, если вы закрыли 1 окно 15 других бы open..so да есть код, который обнаружит закрытия окна, но если вы нажмете ALT + F4 в два раза это закроет ребенка и родителя (если это было всплывающее окно)

7 голосов
/ 15 июля 2015

Если вы не хотите отображать всплывающее окно для всех событий, вы можете добавить такие условия, как

window.onbeforeunload = confirmExit;
    function confirmExit() {
        if (isAnyTaskInProgress) {
           return "Some task is in progress. Are you sure, you want to close?";
        }
    }

Это прекрасно работает для меня

2 голосов
/ 09 февраля 2010

Если вы отправляете внутренний опрос, который требует 100% участия сотрудников вашей компании, то лучшим способом было бы просто иметь форму для отслеживания идентификатора респондента / имя пользователя / адрес электронной почты и т. Д. Каждые несколько дней просто отправляйте приятное маленькое напоминание по электронной почте тем, кто работает в вашей организации, чтобы завершить опрос ... возможно, вы даже можете автоматизировать это.

2 голосов
/ 09 февраля 2010

Появится диалоговое окно, спрашивающее пользователя, действительно ли он хочет закрыть или остаться, с сообщением.

var message = "You have not filled out the form.";
window.onbeforeunload = function(event) {
    var e = e || window.event;
    if (e) {
        e.returnValue = message;
    }
    return message;
};

Затем вы можете сбросить его, прежде чем форма будет отправлена ​​или что-то еще с

window.onbeforeunload = null;

Имейте в виду, что это крайне раздражает. Если вы пытаетесь заставить своих пользователей заполнить форму, которую они не хотят заполнять , то у вас ничего не получится: они найдут способ закрыть окно и никогда не вернуться к вашему виду сайт.

2 голосов
/ 09 февраля 2010

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

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

1 голос
/ 23 января 2012

Как насчет этого?

function internalHandler(e) {
    return "Please don't leave our page ever!";
}

if (window.addEventListener) {
    window.addEventListener('beforeunload', internalHandler, true);
} else if (window.attachEvent) {
    window.attachEvent('onbeforeunload', internalHandler);
}
0 голосов
/ 09 февраля 2010

Ну, вы можете использовать событие window.onclose и возвращать false в обработчике событий.

function closedWin() {
    confirm("close ?");
    return false; /* which will not allow to close the window */
}
if(window.addEventListener) {
     window.addEventListener("close", closedWin, false);
}

window.onclose = closedWin;

Код был взят с этого сайта .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...