Оповещение о случайном закрытии окна браузера - PullRequest
20 голосов
/ 07 августа 2009

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

Ответы [ 4 ]

23 голосов
/ 09 августа 2009

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

  1. Нажмите кнопку браузера назад.
  2. Нажмите на кнопку обновления браузера.
  3. Нажмите на кнопку закрытия браузера.
  4. Нажатие кнопки браузера вперед.
  5. Клавиатура - Alt + F4 (Закрыть)
  6. ход клавиатуры - F5 (Обновить)
  7. Ход клавиатуры - CTRL + F5 (Обновить)
  8. Ход клавиатуры - Shift + F5 (Обновить)
  9. Смена URL
  10. Или что-либо, что вызывает обратную передачу, кроме вашей конкретной кнопки отправки.

Чтобы объяснить, что я использовал два текстовых поля, одну кнопку отправки 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 в ноль. Так что это означает, что на любом элементе управления, где вы хотите, чтобы пользователь не запрашивался, присвойте этому элементу управления класс .noprompt-required и оставьте другой как есть.

22 голосов
/ 07 августа 2009

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

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

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

Тогда, в любое время вы можете позвонить

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

7 голосов
/ 07 августа 2009

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

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

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

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

0 голосов
/ 03 августа 2013

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

$(window).unload( function () { alert("AJAX function to do required job"); } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...