Javascript:onHashchange测试

Ada*_*dam 5 javascript cross-browser hashchange

我试图检查浏览器是否支持onHashChange隐藏一些代码,如果没有,以这种方式:

if(window.onhashchange){
    ...code...
} else {
   ...other code...
}
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

if(typeof window.onhashchange === "function"){
    alert("Supports");  
} else {
    alert("Doesn't Supports");  
}
Run Code Online (Sandbox Code Playgroud)

正如Quirksmode所描述的,这应该可以工作,但是如果我alerttrue statein中做一个而Safari不是警告我但是Safari不支持onHashChange:S

有什么问题呢?如果我没有正确的方式,我应该如何检查它?

小智 6

请注意,最好使用特征检测而不是存在推断(例如窗口中的"onhashchange").

@xkit向我解释了一个很好的特性测试来解决这样一个事实,即虽然IE7不支持onhashchange,但在使用IE7标准文档时,它仍然会返回true,例如if(窗口中的"onhashchange"){/ code /} IE8中的模式.

@xkit建议在onhashchange事件的处理函数中设置一个标志(例如var isSet = true;).然后使用JavaScript更改window.location.hash并查看是否已设置标志.