我正在尝试检查浏览器是否支持onHashChange
,否则隐藏一些代码,如果没有,就这样:
if(window.onhashchange){
...code...
} else {
...other code...
}
我也试过了:
if(typeof window.onhashchange === "function"){
alert("Supports");
} else {
alert("Doesn't Supports");
}
正如 Quirksmode 所述,这应该有效,但如果我在alert
true state
Safari
进行onHashChange
而不是警告我不支持{{1}}:S
它有什么问题?如果我没有以正确的方式进行检查,我应该检查它吗?
答案 0 :(得分:22)
您可以使用in
运算符检测此事件:
if ("onhashchange" in window) {
//...
}
另见:
答案 1 :(得分:6)
警告您最好使用特征检测而不是存在推断(例如窗口中的“onhashchange”)。
@xkit向我解释了一个很好的功能测试来解决这样一个事实:尽管IE7不支持onhashchange,它仍然会返回true,例如if(窗口中的“onhashchange”){/ code < / em> /}在IE8中使用IE7标准文档模式时。
@xkit建议在onhashchange事件的处理函数中设置一个标志(例如var isSet = true;)。然后使用JavaScript更改window.location.hash并查看是否已设置标志。
答案 2 :(得分:1)
自从编写Quirksmode文章以来,您正在使用的Safari版本可能已添加对onhashchange
事件的支持。测试应该仍然有效;在你知道不支持该事件的其他浏览器中尝试。
编辑:另外,您应该使用@CMS描述的方法,因为默认情况下事件不包含函数;因此,这两项测试都将失败。
答案 3 :(得分:1)
if(window.onhashchange!== undefined)alert(&#39;支持onhashchange&#39;);