Свойства события мыши не определены в IE 11

Следующий код, который я использую для определения события закрытия окна браузера, работает, как и предполагалось, в других браузерах, но не в IE11. Поскольку эта строка кода дает мне undefined только в IE11 alert(event.clientY+":"+event.clientX);. Может ли кто-нибудь предложить решение этой проблемы.

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();
    }
};

person PsyLogic    schedule 18.12.2015    source источник
comment
Возможный дубликат pageX pageY не работает в IE8, если я добавляю ‹!DOCTYPE html›   -  person Paul Sweatte    schedule 18.02.2016
comment
Нет, мой вопрос касается IE 11, а не IE8.   -  person PsyLogic    schedule 20.02.2016
comment
Итак... Что должно произойти, если мой курсор находится в середине экрана, и я нажму Alt+F4?   -  person Niet the Dark Absol    schedule 20.02.2016


Ответы (2)


Из события перед загрузкой MDN вы можете увидеть, какие свойства поддерживаются событием объект.

clientX и clientY объекта события не поддерживаются, поэтому они не определены.

Это происходит также в Chrome и FF, потому что событие onbeforeunload не содержит такой информации (позиционные X и Y).

Я протестировал ваш код в IE11, Chrome 48, FF 44.

Возможный обходной путь может быть:

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();
  }
};

person gaetanoM    schedule 20.02.2016

Объект события определяется дважды:

event = window.event || event;

но ссылка здесь не используется:

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

поэтому IE терпит неудачу, потому что код должен быть:

if(event.clientX < 0 || event.clientY < 0)
person Paul Sweatte    schedule 20.02.2016
comment
@psyLogic gaemaf ответил на часть вопроса перед выгрузкой. - person Paul Sweatte; 24.02.2016