所有功劳归于:
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事件处理程序是一种安全的方法吗?
感谢。
答案 0 :(得分:2)
不,这通常不是一个安全的测试,虽然它可能适用于这个特定事件,因为它相对较新。无法保证主机对象(例如window
)如何响应in
运算符,而某些浏览器(包括旧版本Firefox)不会返回true
的事件处理程序属性。以下文章详细介绍:
http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
似乎Firefox added support for detecting event support using the in
operator in version 9而onhashchange
为added in 3.6,所以除非onhashchange
有特殊行为,否则您的测试会在Firefox 3.6 - 8.0中给出漏报。
<强>更新强>
我现在已经在Firefox 3.6中进行了测试,似乎onhashchange
是一个特例,因为您的测试有效:'onhashchange' in window
返回true,而'onload' in window
则不然。看起来您的测试可能没问题,但我仍然建议您仔细测试所有目标浏览器。
答案 1 :(得分:0)
是。它检查对象'onhashchange'
中是否存在键window
并返回布尔值。没有不安全的用法。
答案 2 :(得分:-1)
我会这样做:
if (window.onhashchange) ...