Adam Halasz
Adam Halasz

Reputation: 58301

Javascript : onHashchange Test

I'm trying to check if the browser supports onHashChange or not to hide some code from it if not, in this way:

if(window.onhashchange){
    ...code...
} else {
   ...other code...
}

I tried this too:

if(typeof window.onhashchange === "function"){
    alert("Supports");  
} else {
    alert("Doesn't Supports");  
}

As described on Quirksmode this should work but if I do an alert for example in true state in Safari than alerts me but Safari is not supporting onHashChange :S

What's the problem with it? If I'm not on the right way how should I check it?

Upvotes: 5

Views: 8257

Answers (4)

Semra
Semra

Reputation: 2993

if (window.onhashchange !== undefined) alert('Supports onhashchange');

Upvotes: 1

Mark McDonnell
Mark McDonnell

Reputation: 61

Be warned that you're better off using feature detection rather than existence inference (such as "onhashchange" in window).

@xkit explained to me a good feature test to work around the fact that although IE7 doesn't support onhashchange it would still return true for existence inference such as if("onhashchange" in window){/code/} when using IE7 Standard Document Mode in IE8.

What @xkit suggested was setting a flag (such as var isSet = true;) within a handler function for the onhashchange event. Then changing window.location.hash using JavaScript and see if the flag was set.

Upvotes: 6

mway
mway

Reputation: 4392

It's likely that the version of Safari that you're using has added support for the onhashchange event since the time that that Quirksmode article was written. Tests should still be valid; try it in other browsers you know not to support the event.

Edit: also, you should use the method described by @CMS instead, as the event will not contain a function by default; thus both of those tests will fail.

Upvotes: 1

Christian C. Salvadó
Christian C. Salvadó

Reputation: 827316

You can detect this event by using the in operator:

if ("onhashchange" in window) {
  //...
}

See also:

Upvotes: 21

Related Questions