Javascript:onHashchange测试

时间:2010-10-27 06:05:35

标签: javascript cross-browser hashchange

我正在尝试检查浏览器是否支持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

它有什么问题?如果我没有以正确的方式进行检查,我应该检查它吗?

4 个答案:

答案 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;);