Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mouse Event Properties are Undefined on IE 11

The following code I'm using to Identify the browser window close event and works as intended on other browsers but not on IE11. As this line of code gives me undefined only on IE11 alert(event.clientY+":"+event.clientX);.Can anyone please suggest a solution to this problem.

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();
    }
};
like image 756
PsyLogic Avatar asked Dec 18 '15 07:12

PsyLogic


2 Answers

From MDN beforeunload event you may see what properties are supported from event object.

The clientX and clientY of the event object are not supported so they are undefined.

This happens also in Chrome and FF because the onbeforeunload event does not contain such information (positional X and Y)

I tested your code in IE11, Chrome 48, FF 44.

A possible workaround coud be:

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();
  }
};
like image 61
gaetanoM Avatar answered Sep 28 '22 06:09

gaetanoM


The event object is defined twice:

event = window.event || event;

but the reference is not used here:

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

so IE fails because the code should be:

if(event.clientX < 0 || event.clientY < 0)
like image 45
Paul Sweatte Avatar answered Sep 28 '22 08:09

Paul Sweatte