7

Następujący kod używam do identyfikowania zdarzenia zamknięcia okna przeglądarki i działa zgodnie z przeznaczeniem w innych przeglądarkach, ale nie w IE11. Ponieważ ta linia kodu daje mi undefined tylko na IE11 alert(event.clientY+":"+event.clientX);. Może ktoś zaproponować rozwiązanie tego problemu.Właściwości zdarzeń myszy są niezdefiniowane na IE 11

window.onbeforeunload = function(event) 
{ 
event= window.event|| event; 
alert(event); 
alert(event.clientY+":"+event.clientX); 

    if(event.clientX <0 || event.clientY < 0) 
    { 
     // ajax call to server to nullify the session. 
     window.close(); 
    } 
}; 
+0

Możliwy duplikat [pageX pageY nie pracuje w IE8 jeśli dodać ] (http://stackoverflow.com/questions/20272820/pagex-pagey-not-working-in-ie8-if-i-add-doctype-html) –

+0

Nie, moje pytanie dotyczy IE 11 i nie dla IE8 –

+0

Więc ... Co powinno się stać, gdy mój kursor znajduje się pośrodku ekranu, a ja wciskam Alt + F4? –

Odpowiedz

0

Z MDN beforeunload event możesz zobaczyć, jakie właściwości są obsługiwane z obiektu zdarzenia.

KlientX i clientY obiektu zdarzenia nie są obsługiwane, więc nie są zdefiniowane.

Dzieje się tak również w Chrome i FF ponieważ zdarzeniem onbeforeunload nie zawiera taką informację pozycyjną (X i Y)

Przetestowałem kod w IE11, Chrome 48, FF 44.

Możliwe obejście coud być:

var clientX = 0; 
 
var clientY = 0; 
 
var scheduled = false; 
 

 
window.onmousemove = function (event) { 
 
    if (!scheduled) { 
 
    scheduled = true; 
 
    setTimeout(function() { 
 
     event = event || window.event; 
 
     clientX = event.clientX; 
 
     clientY = event.clientY; 
 
     scheduled = false; 
 
    }, 1000); 
 
    } 
 
} 
 

 
window.onbeforeunload = function (event) { 
 
    alert(clientY+":"+clientX); 
 
    if (clientX < 0 || clientY < 0) { 
 
    // ajax call to server to nullify the session. 
 
    window.close(); 
 
    } 
 
};

1

Obiekt zdarzenia definiuje się dwukrotnie:

event = window.event || event; 

ale nie jest stosowana tutaj:

if(window.event.clientX < 0 || window.event.clientY < 0) 

tak IE nie dlatego, że kod powinien być:

if(event.clientX < 0 || event.clientY < 0) 
+0

Nie! alert (event.clientY + ":" + event.clientX); daje mi niezdefiniowane. Dziękuję za wskazanie literówki w moim pytaniu, które edytowałem teraz, ale twoja odpowiedź niczego nie rozwiązuje. –

+0

@psyLogic gaemaf odpowiedział na część beforeUnload pytania. –