Как определить событие закрытия окна (новой вкладки)? - PullRequest
2 голосов
/ 06 июля 2010

У меня есть одна родительская страница и дочерняя страница. дочерняя страница открылась в новой вкладке

Я хочу показать одно предупреждение (дочерняя страница закрывается) , при закрытии дочерней вкладки.
Как показать закрывающие сообщения, когда закрывать вкладку? (Не освежает время)

Я использовал onunload и onbeforeunload .
Вызывается также два метода, когда страница обновляется и закрывается вкладка.

window.onunload = function doUnload(e)
{
  alert('Child window is closing...'); 
}

и

window.onbeforeunload = function doUnload(e)
{
  alert('Child window is closing...'); 
}

Я должен показать предупреждение, только закрыть вкладку в браузере.

Помоги мне. Заранее спасибо.

Обновление

Я использую следующий скрипт. Его работало в IE. Но не работал в FireFox

  <script language="javascript" type="text/javascript">          

  window.onbeforeunload = function()
  {   
      if ((window.event.clientX < 0) || (window.event.clientY < 0) || (window.event.clientX < -80)) 
     {            
          alert("Child window is closing...");  
     }   
 };   

</script>

Как добиться этого в FireFox и других браузерах.

Ответы [ 4 ]

1 голос
/ 06 июля 2010

Афаик никогда не был кросс-браузерным скриптом для этого. Решение состоит в том, чтобы НЕ полагаться на недокументированные и изменяемые функции конкретного браузера для обнаружения чего-то важного.

Поскольку у вас есть страница CHILD, вы можете настроить тест в родительском элементе (открывателе), который через определенные промежутки времени проверяет свойство childWindowHandle.closed и действует на него.

1 голос
/ 15 сентября 2011

Работает ли скрипт из http://chrismckee.co.uk/good-sir-before-you-unload-crossbrowser-javascript-headaches/?

Предполагая, что вы просто пытаетесь запустить кроссбраузер событий до загрузки, это в значительной степени делает это (исключая оперу)

try{
    // http://www.opera.com/support/kb/view/827/
    opera.setOverrideHistoryNavigationMode('compatible');
    history.navigationMode = 'compatible';
}catch(e){}

//Our Where The F' Are You Going Message
function ReturnMessage()
{
    return "WTF!!!";
}

//UnBind Function
function UnBindWindow()
{
    window.onbeforeunload = null;
    return true;
}

//Bind Links we dont want to affect
document.getElementById('homebtn').onclick = UnBindWindow;
document.getElementById('googlebtn').onclick = UnBindWindow;

//Bind Exit Message Dialogue
window.onbeforeunload = ReturnMessage;
0 голосов
/ 10 декабря 2015

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

Вы можете сделать несколько небольших вещей, прежде чем клиент закроет вкладку. JavaScript обнаруживает браузер, закрывает вкладку / закрывает браузер , но если у вас большой список действий и вкладка закрывается до его завершения, вы беспомощны.Вы можете попробовать это, но мой опыт не зависит от этого.Да, вы не можете в это время дифференцировать назад и обновлять и закрывать.Так что нет надежного способа сказать, действительно ли ребенок закрылся.

window.addEventListener("beforeunload", function (e) {
  var confirmationMessage = "\o/";
  /* Do you small action code here */
  (e || window.event).returnValue = confirmationMessage; //Gecko + IE
  return confirmationMessage;                            //Webkit, Safari, Chrome
});

https://developer.mozilla.org/en-US/docs/Web/Reference/Events/beforeunload?redirectlocale=en-US&redirectslug=DOM/Mozilla_event_reference/beforeunload

0 голосов
/ 06 июля 2010

В Mozilla есть Devloper site , который в основном говорит, что проверяет тип браузера и использует нижеприведенную проверку соответственно. Надеюсь, это поможет.

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