addEventListener代码片段翻译和跨浏览器检测的使用
addEventListener Code Snippet Translation and Usage for cross-browser detectioin
我遇到了一段我想建模的代码。不过,我有几个问题,也许你们能帮忙。下面是代码:
function addEvent( brw_obj, type, func ) {
if (brw_obj.addEventListener) { // all browsers except IE < v9
brw_obj.addEventListener( type, func, false );
} else if (brw_obj.attachEvent) { // IE only for v < v9
brw_obj["e"+type+func] = func;
brw_obj[type+func] = function() {
brw_obj["e"+type+func]( window.event );
}
brw_obj.attachEvent( "on"+type, brw_obj[type+func] );
}
/* else if (brw_obj.captureEvents) {
brw_obj.captureEvents(Event.CLICK); // only works with FF < v3!
}
*/
}
现在,我有点理解,代码是检查addEventListener或attachEvent;但是下面这几行具体是什么意思呢?我还没见过这样写的javascript:
brw_obj["e"+type+func] = func;
brw_obj[type+func] = function() {
brw_obj["e"+type+func]( window.event );
}
brw_obj.attachEvent( "on"+type, brw_obj[type+func] );
另外,使用这个代码是做浏览器或对象检测的好方法吗?
我正在写一个脚本,需要确保它运行在所有的现代浏览器以及旧的。据我所知,大多数现代浏览器支持addEventListener, IE支持attachEvent。我不确定的是旧的浏览器是否支持这两种方式。
对于注释掉的行:
/* else if (brw_obj.captureEvents) {
brw_obj.captureEvents(Event.CLICK); // only works with FF
}
*/
我在某处读到,只有旧的Firefox浏览器支持捕获事件。在整个代码的上下文中,需要这些行吗?
欢迎任何有见地的评论、批评和建议。谢谢!:)
我已经使用try/catch方法一段时间了,它在我当前的项目中一直工作得很好。请看下面的代码片段:
var request;
try {
request = new XMLHttpRequest(); // standard
}
catch (e) {
request = new ActiveXObject("Microsoft.XMLHTTP"); // workaround
}
上面的示例应该可以在Internet Explorer 5.0之前的所有浏览器上工作;当然,你不可能支持所有古老的浏览器,但是,嘿,马赛克不讲JavaScript,无论如何。
你可以"try"调用addEventListener如果你"catch"到一个错误你可以调用attachEvent
就是我的$0,02.
我最近自己也遇到了addEventListener问题,所以下面是我目前对此事的处理方法:
function addEventListener(target, type, listener) {
if (target) {
if (target.addEventListener) {
target.addEventListener(type, listener, false);
}
else if (target.attachEvent) {
target.attachEvent("on" + type, listener);
}
}
else {
throw new Error("Can't addEventListener: target object is null.");
}
}
然后你只需调用新的addEventListener函数,它会带走浏览器支持的任何东西。
相关文章:
- jQuery检测浏览器是否支持Zoom
- 使用(navigator.geolocation)检测浏览器功能错误
- 如何在jquery中检测浏览器的后退按钮,如果有任何对话框打开,请关闭它
- 如何(功能)检测浏览器是否支持WebM alpha透明度
- 如何检测浏览器是否正在加载
- 如何检测浏览器并根据浏览器显示视频
- 如何检测浏览器控制台/检查器是否已打开
- 正在检测浏览器's的结束选项卡
- 如何检测浏览器大小并实时更改javascript函数控件
- 如何单独检测浏览器刷新
- 如何动态检测浏览器视口大小的变化
- php检测浏览器窗口宽度,然后包括适当的php文件
- 如何简单地用JQuery或JavaScript检测浏览器类型
- 如何__defineGetter__可用于检测浏览器中的控制台是否打开
- 检测浏览器's的前进和后退按钮,并触发jquery事件
- 如何检测浏览器是否支持js-onscroll.立即
- 如何检测浏览器(不是窗口)关闭事件
- 如何检测浏览器窗口是否已从另一个浏览器窗口打开
- 浏览器检测浏览器,如 Chrome Canary
- 如何在检测浏览器语言的同时停止JavaScript的无限循环