Оповещение при случайном закрытии окна браузера

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

Ответ 1

Мы должны предупредить или предложить пользователю, что при выполнении этих действий он потеряет свои данные.

  • Нажмите кнопку "Назад" браузера.
  • Нажмите кнопку обновления браузера.
  • Нажмите кнопку закрытия браузера.
  • Нажмите кнопку прямого браузера.
  • Показ клавиатуры - Alt + F4 (Закрыть)
  • Падение клавиатуры - F5 (Обновить)
  • Клавиатура - CTRL + F5 (Обновить)
  • Клавиатура - Shift + F5 (Обновить)
  • Смена URL
  • Или все, что вызывает обратную передачу, отличную от вашей кнопки отправки.

Чтобы объяснить, что я использовал два текстовых поля, одну кнопку отправки Asp.net с идентификатором TestButton. Другие методы обратной передачи, которые я принял, Еще одна кнопка asp.net, один флажок с свойством autopostback true, один раскрывающийся список с атрибутом autopostback true. Теперь я использовал все эти элементы управления обратной связью, чтобы показать вам, что нам также нужно показать пользователю, что данные теряются, когда пользователь выполняет действия над этими элементами управления. На кнопке "Отправить" мы не будем отображать приглашение, так как мы должны отправить данные с помощью этого элемента управления. Вот пример кода. Я установил метод window.onbeforeunload при изменении элементов управления.

<html >
<head id="Head1">
    <title></title>

    <script type="text/javascript"
            src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

    <script type="text/javascript">
        $(function()
        {
            // Prevent accidental navigation away
            $(':input').bind(
                'change', function() { setConfirmUnload(true); });
            $('.noprompt-required').click(
                function() { setConfirmUnload(false); });

            function setConfirmUnload(on)
            {
                window.onbeforeunload = on ? unloadMessage : null;
            }
            function unloadMessage()
            {
                return ('You have entered new data on this page. ' +
                        'If you navigate away from this page without ' +
                        'first saving your data, the changes will be lost.');
            }

            window.onerror = UnspecifiedErrorHandler;
            function UnspecifiedErrorHandler()
            {
                return true;
            }

        }); 

    </script>

</head>
<body>
    <form id="form1" name="myForm" runat="server">
    <div>
        First Name :<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
        <br />
        Last Name :<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
        <br />
        IsMarried :<asp:CheckBox ID="CheckBox1" runat="server" /><br />
        <br />
        <asp:Button runat="server" ID="TestButton" Text="Submit" CssClass="noprompt-required" /><br />
        <br />
        <br />
        <br />
        <br />
        <asp:Button runat="server" ID="AnotherPostbackButton" Text="AnotherPostbackButton"
             /><br />
        <br />
        <asp:CheckBox runat="server" ID="CheckboxWhichCausePostback" Text="CheckboxWhichCausePostback"
            AutoPostBack="true" /><br />
        <br />
        DropdownWhichCausePostback<asp:DropDownList runat="server" ID="DropdownWhichCausePostback"
            AutoPostBack="true">
            <asp:ListItem Text="Text1"></asp:ListItem>
            <asp:ListItem Text="Text2"></asp:ListItem>
        </asp:DropDownList>
        <br />
        <br />
    </div>
    </form>
</body>

Выше я использовал:

$('.noprompt-required').click(function() { setConfirmUnload(false); });

Что я сделал в этой строке, я вызываю метод setConfirmUnload и передаю false как аргумент, который устанавливает значение window.onbeforeunload равным null. Итак, что это значит, на любом элементе управления, где вы хотите, чтобы этот пользователь не запрашивался, дайте этому элементу управления .noprompt-required и оставьте его другим, как есть.

Ответ 2

Это не вещь JQuery, я использую следующие функции:

function setConfirmUnload(on) {
    window.onbeforeunload = (on) ? unloadMessage : null;
}

function unloadMessage() {
    return "Are you sure you want to leave this page";
}

Затем в любое время вы можете позвонить

setConfirmUnload (true), чтобы включить подтверждение или false, если вы хотите разрешить им закрывать экран без предупреждения (например, если у вас есть кнопка закрытия).

Ответ 3

Вы можете попробовать событие выгрузить:

$(window).unload( function () { alert("Bye now!"); } );

http://docs.jquery.com/Events/unload

Я предполагаю, что эта очистка находится только на клиенте. Было бы интересно узнать природу этих "чисток".

Ответ 4

Вы можете попробовать это с помощью ajax

$(window).unload( function () { alert("AJAX function to do required job"); } );