7

Der folgende Code, den ich verwende, um das Ereignis zum Schließen des Browserfensters zu identifizieren, funktioniert wie vorgesehen in anderen Browsern, jedoch nicht auf IE11. Wie diese Codezeile gibt mir undefined nur auf IE11 alert(event.clientY+":"+event.clientX); .Kann jemand bitte eine Lösung für dieses Problem vorschlagen.Eigenschaften des Mausereignisses sind auf IE 11 nicht definiert

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

Mögliche Duplikat [pageX pageY nicht in IE8 zu arbeiten, wenn ich hinzufügen ] (http://stackoverflow.com/questions/20272820/pagex-pagey-not-working-in-ie-8-if-i-add-doctype-html) –

+0

Nein, meine Frage ist für IE 11 und nicht für IE8 –

+0

Also ... Was passiert, wenn mein Cursor in der Mitte des Bildschirms ist und ich Alt + F4 drücke? –

Antwort

0

Von MDN beforeunload event Sie können sehen, welche Eigenschaften vom Ereignisobjekt unterstützt werden.

clientX und clientY des Ereignisobjekts werden nicht unterstützt, daher sind sie nicht definiert.

Dies geschieht auch in Chrome und FF, da das onbeforeunload Ereignis nicht solche Informationen (Positions X und Y)

I getestet enthält Code in IE11, Chrome 48, FF 44.

Eine mögliche Abhilfe coud sein:

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

Das Ereignisobjekt wird zweimal definiert:

event = window.event || event; 

aber die Referenz verwendet wird, nicht hier:

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

so versagt IE, da der Code sein sollte:

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

Nein! alert (event.clientY + ":" + event.clientX); gibt mir undefiniert. Danke, dass du auf den Tippfehler in meiner Frage hingewiesen hast. Ich habe ihn jetzt bearbeitet, aber deine Antwort löst nichts. –

+0

@psyLogic gaemaf hat den beforeUnload-Teil der Frage beantwortet. –