Поймать событие закрытия браузера - PullRequest
1 голос
/ 24 ноября 2010

Hello Seniors (так как я новичок в веб-приложениях), Я был заинтересован, чтобы реализовать или поймать событие закрытия браузера. Да! Я сделал это и успешно реализовал его с помощью JavaScript {см. Код ниже} но я реализовал это на веб-странице без MasterPage. Теперь, когда я пытаюсь реализовать это на веб-странице с MASTERPAGE, но в каждом посте назад ... происходит событие window.onunload, которое вызывает у меня проблемы ... Существует ли какая-либо техника или логика, позволяющая определить, могу ли я различить кнопку «Закрыть браузер» и событие обратной публикации страницы.

Пожалуйста, ведите меня ... как я должен реализовать в проекте как можно скорее .... спасибо.

Анкит Шривастава

 <script type="text/javascript">

        function callAjax(webUrl, queryString)
        {
            var xmlHttpObject = null;

                try
                {
                        // Firefox, Opera 8.0+, Safari...

                        xmlHttpObject = new XMLHttpRequest();
                    }
               catch(ex)
                {
                       // Internet Explorer...

                try
                    {
                        xmlHttpObject = new ActiveXObject('Msxml2.XMLHTTP');
                    }
                catch(ex)
                {
                    xmlHttpObject = new ActiveXObject('Microsoft.XMLHTTP');
                }
             }

            if ( xmlHttpObject == null )
                {
                window.alert('AJAX is not available in this browser');
                return;
                 }

        xmlHttpObject.open("GET", webUrl + queryString, false);
        xmlHttpObject.send();

        return xmlText;
}

</script>

<script type="text/javascript">

var g_isPostBack = false;

window.onbeforeunload = check ()
function check()
{
 if ( g_isPostBack == true )
  return;

 var closeMessage =
  'You are exiting this page.\n' +
  'If you have made changes without saving, your changes will be lost.\n' +
  'Are you sure that you want to exit?';

 if ( window.event )
 {
  // IE only...

  window.event.returnValue = closeMessage;
 }
 else
 {
  // Other browsers...

  return closeMessage;
 }

 g_isPostBack = false;
}
window.onunload = function ()
{
 if ( g_isPostBack == true )
  return;

 var webUrl = 'LogOff.aspx';
 var queryString = '?LogoffDatabase=Y&UserID=' + '<%# Session["loginId"] %>';
 var returnCode = callAjax(webUrl, queryString);

}

</script>

Ответы [ 5 ]

3 голосов
/ 24 ноября 2010

Не существует события javascript, которое различало бы закрытие браузера и переход пользователя на другую страницу (либо с помощью кнопки «назад / вперед», либо путем нажатия на ссылку, либо любым другим методом навигации). Вы можете только сказать, когда текущая страница выгружается. Сказав это, я не знаю, зачем вам вообще нужно знать разницу? Похоже, проблема XY для меня.

0 голосов
/ 06 июня 2014

window.unload срабатывает, когда мы перемещаемся с одной страницы на другую, а также когда мы нажимаем кнопку закрытия нашего браузера, поэтому для обнаружения только кнопки закрытия браузера вам нужно использовать флаг.

var inFormOrLink;

$("a,:button,:submit").click(function () { inFormOrLink = true; });

$(":text").keydown(function (e) {    

    if (e.keyCode == 13) {
        inFormOrLink = true;
    }
})/// Sometime we submit form on pressing enter
$(window).bind("unload", function () {
    if (!inFormOrLink) {

        $.ajax({
            type: 'POST',
            async: false,
            url: '/Account/Update/'

        });
    }
})
0 голосов
/ 21 марта 2013

Если кто-то хочет поймать Выйти из системы, когда браузер закрыт (нажав на крестик), мы можем воспользоваться помощью оконных событий.Будут полезны два события: onunload и onbeforeunload.Но возникает проблема, что код также будет работать, если вы переходите с одной страницы на другую, а также когда вы обновляете страницу.Мы не хотим, чтобы наши сеансы были чистыми и вставляли запись о выходе из системы во время обновления.Таким образом, решение заключается в том, чтобы мы различали разницу между закрытием и обновлением или навигацией.Я получил решение:

  1. Напишите 'onbeforeunload = "loadOut ();" "в теге body на главной странице.

  2. Добавьтеследующая функция внутри скрипта в разделе заголовка главной страницы: -

    функция loadOut () {if ((window.event.clientX <0) || (window.event.clientY <0)) {<br>// вызов метода кода для вставки выхода в базу данных}}

И все готово.Это работает для IE, пожалуйста, проверьте другие браузеры.Аналогично вы можете обнаружить событие, если окно закрыто, нажав комбинацию клавиш ALT + F4.

0 голосов
/ 25 ноября 2010

Первый шаг: добавьте глобальную переменную JavaScript с именем "_buttonClicked", которая изначально имеет значение false.

Второй шаг: каждый щелчок кнопки должен присвоить значению _buttonClicked значение true .. с jQuery это одна строка, чистый JavaScript также состоит из нескольких строк.

Третий шаг: в вашей функции отметьте _buttonClicked и, если это правда, ничего не делайте.

РЕДАКТИРОВАТЬ: После быстрого просмотра вашего кода я вижу, что у вас уже есть шаги № 1 и № 3, поэтому все, что вам нужно, это второй шаг, назначьте g_isPostBack как true при нажатии любой кнопки отправки. Дайте мне знать, если вам нужна помощь в реализации кода и есть ли у вас jQuery.

0 голосов
/ 24 ноября 2010

Ответ можно найти на SO: Как записать событие закрытия окна браузера?

jQuery(window).bind("beforeunload", function(){return confirm("Do you really want to close?") })

и запретить подтверждение при отправке:

jQuery('form').submit(function() {
    jQuery(window).unbind("beforeunload");
    ...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...