0

所有功劳归于:

http://benalman.com/news/2010/03/jquery-special-events/#add-and-remove-hashchange

对于这种方法,但我们想知道是否执行以下操作:

if('onhashchange' in window){
    console.log('yep, window supports onhashchange');
}
else{
    console.log('nope, window does not support onhashchange');
}

确定窗口对象是否支持 onhashchange 事件处理程序是一种安全的方法吗?

谢谢。

4

3 回答 3

2

不,这通常不是一个安全的测试,尽管对于这个特定的事件来说可能是可以的,因为它相对较新。无法保证主机对象(例如window)将如何响应in操作符,并且某些浏览器(包括旧版本的 Firefox)不会返回true事件处理程序属性。以下文章有详细说明:

http://perfectkills.com/detecting-event-support-without-browser-sniffing/

似乎Firefox在版本 9中添加了对使用运算符检测事件支持的支持,in在 3.6中添加了,因此除非有特殊行为,否则您的测试将在 Firefox 3.6 - 8.0 中给出假阴性。onhashchangeonhashchange

更新

我现在已经在 Firefox 3.6 中进行了测试,这似乎onhashchange是一个特殊情况,因为您的测试有效:'onhashchange' in window返回 true,而'onload' in window,例如,没有。看起来您的测试可能没问题,尽管我仍然建议您仔细测试所有目标浏览器。

于 2012-05-11T12:23:49.437 回答
0

是的。它检查'onhashchange'对象中是否存在键window并返回布尔值。没有不安全的使用。

于 2012-05-11T11:51:09.387 回答
-1

我会这样做:

if (window.onhashchange) ...
于 2012-05-11T12:00:59.083 回答