2008-09-26 2 views
4

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

ответ

2

Прикрепите событие "onbeforeunload". Он может выполнять код непосредственно перед закрытием браузера/вкладки.

1

Does document.unload не делать это, если вы?

+0

document.unload является стороне клиента, так что вы должны были бы пойти на шаг дальше, чтобы быть в состоянии справиться с этим на стороне сервера (в коде осины) и возможно, отключить запрос AJAX из обработчика события разгрузки документа? – kristian 2008-09-26 09:14:15

+0

Будет ли работать асинхронный вызов? Я имею в виду ... вкладка убивается, конечно, лучше быть синхронным и каким-то образом заблокировать ее. – 2008-09-26 09:15:44

0

Если вам нужно знать, когда страница закрыта со стороны сервера, лучше всего периодически пересылать сервер со страницы (например, через XMLHttpRequest). Когда pinging останавливается, страница закрывается. Это также будет работать, если браузер разбился, был прерван или компьютер был отключен.

0

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

6

onbeforeunload также вызывается на следующих событий -

* Close the current browser window. 
* Navigate to another location by entering a new address or selecting a Favorite. 
* Click the Back, Forward, Refresh, or Home button. 
* Click an anchor that refers the browser to another Web page. 
* Invoke the anchor.click method. 
* Invoke the document.write method. 
* Invoke the document.open method. 
* Invoke the document.close method. 
* Invoke the window.close method. 
* Invoke the window.open method, providing the possible value _self for the window name. 
* Invoke the window.navigate or NavigateAndFind method. 
* Invoke the location.replace method. 
* Invoke the location.reload method. 
* Specify a new value for the location.href property. 
* Submit a form to the address specified in the ACTION attribute via the INPUT type=submit control, or invoke the form.submit method. 

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

0

Santosh is right, это событие будет активировано на многие другие действия, чем просто нажать кнопку закрытия вкладки/браузера. Я создал небольшой взломать, чтобы предотвратить срабатывание onbeforeunload, добавив следующую функцию в готовый документ.

 $(function() {  
     window.onbeforeunload = OnBeforeUnload; 
      $(window).data('beforeunload', window.onbeforeunload); 
      $('body').delegate('a', 'hover', function (event) { 
       if (event.type === 'mouseenter' || event.type === "mouseover") 
        window.onbeforeunload = null; 
       else 
        window.onbeforeunload = $(window).data('beforeunload'); 
      }); 
     }); 

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

window.onbeforeunload = null; 

Если вы не хотите, чтобы событие срабатывает.

И вот окончательный кусок кода:

function OnBeforeUnload(oEvent) { 
      // return a string to show the warning message (not every browser will use this string in the dialog) 
      // or run the code you need when the user closes your page 
     return "Are you sure you want to close this window?";  
    } 
Смежные вопросы