在窗口中使用'eventhandler'是一种确定窗口是否支持给定事件处理程序的安全方法?

时间:2012-05-11 11:47:32

标签: javascript events window handler detect

所有功劳归于:

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事件处理程序是一种安全的方法吗?

感谢。

3 个答案:

答案 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 9onhashchangeadded 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) ...