I want to check if the browser supports hashchange event and, if not, fake it with setInterval.

I have tried

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

But the problem is that, in IE8 in IE7 Compat mode, 'onhashchange' in window returns true because window.onhashchange is null (jsfiddle)

Why does it happen? If I use 'onclick2' in window, it returns false!

I have read Detecting support for a given JavaScript event?, but I would prefer to use something simpler if possible.

有帮助吗?

解决方案

It seems 'onhashchange' in window was true because I was using IE8 in IE7 mode instead of real IE7

But I have just tried it with IETester and 'onhashchange' in window gives false.

Now, I wonder why does IE 8 have IE7 mode if it can't emulate IE7 very well

其他提示

I'm not sure why IE is giving you that, but why not just test for true

if(("onhashchange" in window) === true){
  /* Supported */
}else{
  /* Backup */
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top