2014-01-20 4 views
18

Я пытаюсь с onbeforeunload и выгружать функцию. Но это не сработало. При нажатии ссылки или обновлении это событие активизировалось. Я хочу событие, которое запускается только при закрытии окна браузера или вкладки. Код должен работать во всех браузерах.Как обнаружить окно браузера/вкладку Close Event?

Я использую следующий код на главной странице.

<script type="text/jscript"> 

    var leaving = true; 
    var isClose = false; 

    function EndChatSession() { 
     var request = GetRequest(); 
     request.open("GET", "../Chat.aspx", true); 
     request.send(); 
    } 
    document.onkeydown = checkKeycode 
    function checkKeycode(e) { 
     var keycode; 
     if (window.event) 
      keycode = window.event.keyCode; 
     else if (e) 
      keycode = e.which; 
     if (keycode == 116) { 
      isClose = true; 
     } 
    } 
    function somefunction() { 
     isClose = true; 
    } 
    window.onbeforeunload = function (e) { 
     if (!e) e = event; 
     if (leaving) { 
      EndChatSession(); 
      e.returnValue = "Are You Sure"; 

     } 
    } 
    function GetRequest() { 
     var xmlHttp = null; 
     try { 
      // Firefox, Opera 8.0+, Safari 
      xmlHttp = new XMLHttpRequest(); 
     } 
     catch (e) { 
      //Internet Explorer 
      try { 
       xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
      catch (e) { 
       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
     } 
     return xmlHttp; 
    }  
</script> 

и в моем теле тега:

Приведенный выше код работает в IE, но не в хроме ...

ответ

13

Вы не можете обнаружить его с помощью JavaScript.

Только события, которые обнаруживают разгрузку/закрытие страницы, являются window.onbeforeunload и window.unload. Ни одно из этих событий не может сказать вам, как вы закрыли страницу.

18

Этот код предотвращает события флажка. Он работает, когда пользователь нажимает кнопку закрытия браузера, но не работает, когда установлен флажок. Вы можете изменить его для других элементов управления (texbox, radioobutton и т. Д.)

window.onbeforeunload = function() { 
     return "Are you sure?"; 
    } 

    $(function() { 
     $('input[type="checkbox"]').click(function() { 
      window.onbeforeunload = function() { }; 
     }); 
    }); 
+1

при обновлении также вызывается предупреждение. , , , любая идея исключить событие обновления – Gora

3

Вы также можете сделать, как показано ниже.

положить ниже код сценария в заголовке тега

<script type="text/javascript" language="text/javascript"> 
function handleBrowserCloseButton(event) { 
    if (($(window).width() - window.event.clientX) < 35 && window.event.clientY < 0) 
    { 
     //Call method by Ajax call 
     alert('Browser close button clicked');  
    } 
} 
</script> 

вызова выше функции из тела тега, как показано ниже

<body onbeforeunload="handleBrowserCloseButton(event);"> 

Спасибо

-2

Да, есть! После многих головных болей я нашел одно решение.

Monitor.php

Этот файл PHP будет отслеживать браузера событие закрытия. Как только браузер будет закрыт, connection_aborted вернет 1, следовательно, цикл сломается.

<?php 
// Ignore user aborts and allow the script 
// to run forever 
ignore_user_abort(true); 
set_time_limit(0); 

echo connection_aborted(); 
while(1) 
{ 
echo "Whatever you echo here wont be printed anywhere but it is required in order to work."; 
flush(); 
if(connection_aborted()) 
{ 
break; 
// Breaks only when browser is closed 
} 
} 

/* 
Action you want to take after browser is closed. 
Write your code here 
*/ 
?> 

Caller.php

Это файл, который будет вызывать Monitor.php

<?php 
Header('Location: monitor.php'); 
?> 

Parent.html

Это будет файл, который вы фактически будете взаимодействовать. При загрузке это приведет непосредственно к вызову AJAX Caller.php, который автоматически запустит Monitor.php в фоновом режиме.

<script> 

var xmlhttp = new XMLHttpRequest(); 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 

      } 
     } 

    xmlhttp.open("GET", "Caller.php", true); 
     xmlhttp.send(); 

</script> 

Таким образом, окончательный поток Parent.html -----> Caller.php -----> Monitor.PHP

+0

работает ли это бесконечно на загрузке страницы? как после закрытия окна, системная память, кажется, заполняется, и моя система зависает. – Anant

+0

Это не вопрос php – Liam

4
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 
<script type="text/javascript"> 
var validNavigation = false; 

function wireUpEvents() { 
var dont_confirm_leave = 0; //set dont_confirm_leave to 1 when you want the user to be able to leave withou confirmation 
var leave_message = 'ServerThemes.Net Recommend BEST WEB HOSTING at new tab window. Good things will come to you' 
function goodbye(e) { 
if (!validNavigation) { 
window.open("http://serverthemes.net/best-web-hosting-services","_blank"); 
return leave_message; 

} 
} 
window.onbeforeunload=goodbye; 

// Attach the event keypress to exclude the F5 refresh 
$(document).bind('keypress', function(e) { 
if (e.keyCode == 116){ 
    validNavigation = true; 
} 
}); 

// Attach the event click for all links in the page 
$("a").bind("click", function() { 
validNavigation = true; 
}); 
    // Attach the event submit for all forms in the page 
$("form").bind("submit", function() { 
validNavigation = true; 
}); 

// Attach the event click for all inputs in the page 
    $("input[type=submit]").bind("click", function() { 
validNavigation = true; 
}); 

} 

    // Wire up the events as soon as the DOM tree is ready 
    $(document).ready(function() { 
    wireUpEvents(); 
    }); 
    </script> 

Я сделал ответ на Can you use JavaScript to detect whether a user has closed a browser tab? closed a browser? or has left a browser?

-1

сделать разницу между обновлением и закрытой вкладкой или штурманом, вот как я установил его:

<script> 
 
    function endSession() { 
 
     // Browser or Broswer tab is closed 
 
     // Write code here 
 
    } 
 
</script> 
 

 
<body onpagehide="endSession();"> 
 

 
</body>

+0

ваш код делает то же самое в обоих случаях. – RicardoGonzales

+0

Ваш код не идеален для обнаружения закрытия вкладки/окна, потому что onpagehide уволен, чтобы перейти от страницы. Например. нажав на ссылку, обновив страницу, представив форму, закрыв окно браузера и т. д. – mRizvandi