5

我正在尝试以onHashChange这种方式检查浏览器是否支持或不隐藏一些代码:

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

我也试过这个:

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

Quirksmode中所述,这应该可以工作,但是如果我alerttrue statein 中进行操作,则会Safari提醒我,但 Safari 不支持onHashChange:S

它有什么问题?如果我不正确,我应该如何检查它?

4

4 回答 4

22

您可以使用in运算符检测此事件:

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

也可以看看:

于 2010-10-27T06:26:27.740 回答
6

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

@xkit 向我解释了一个很好的功能测试来解决这样一个事实,即尽管 IE7 不支持 onhashchange 它仍然会在使用 IE7 标准文档时返回 true 存在推断,例如 if("onhashchange" in window){/ code /} IE8 中的模式。

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

于 2011-08-21T21:06:32.500 回答
1

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

于 2012-04-09T20:51:16.157 回答
1

onhashchange自从撰写 Quirksmode 文章以来,您使用的 Safari 版本很可能已经添加了对该事件的支持。测试应该仍然有效;在您知道不支持该事件的其他浏览器中尝试。

编辑:另外,您应该改用@CMS 描述的方法,因为该事件默认情况下不包含函数;因此,这两个测试都将失败。

于 2010-10-27T06:26:41.950 回答