Почему `'onhashchange' в окне` возвращает `true` в режиме совместимости IE7 с IE8?

Я хочу проверить, поддерживает ли браузер событие hashchange, и, если нет, подделать его с помощью setInterval.

я пытался

if ('onhashchange' in window) {
    window.onhashchange = hashChange;
} else {
    /* setInterval graceful degradation */
}

Но проблема в том, что в IE8 в режиме совместимости IE7 'onhashchange' in window возвращает true, потому что window.onhashchange равно null (jsfiddle)

Почему это происходит? Если я использую 'onclick2' in window, он возвращает false!

Я прочитал Обнаружение поддержки для данного события JavaScript?, но я предпочел бы использовать что-то более простое, если это возможно.


comment
IE8 в режиме IE7: могут ли функциональные возможности режима включать в себя более свежие разработки, а не вести себя как IE7?   -  person mavili    schedule 28.08.2013
comment
@mavili Понятия не имею, но событие hashchange не работает в IE8 в режиме IE7   -  person Oriol    schedule 28.08.2013


Ответы (2)


Кажется, 'onhashchange' in window было true, потому что я использовал IE8 в режиме IE7 вместо настоящего IE7.

Но я только что попробовал это с помощью IETester, и 'onhashchange' in window дает false.

Теперь мне интересно, почему в IE 8 есть режим IE7, если он не может очень хорошо эмулировать IE7.

person Oriol    schedule 27.08.2013
comment
Дело в том, что он достаточно хорошо эмулирует старую версию. Compatibility View никогда не был идеальным (и он не был задуман), и команда IE продолжает отходить от этой технологии с IE11. - person EricLaw; 28.08.2013

Я не уверен, почему IE дает вам это, но почему бы просто не проверить на истинность

if(("onhashchange" in window) === true){
  /* Supported */
}else{
  /* Backup */
}
person Will    schedule 27.08.2013
comment
Нет, проблема в том, что 'onhashchange' in window дает true - person Oriol; 28.08.2013