我遇到了一段我想建模的代码。但是,我只是有几个问题,也许你们可以提供帮助。这是代码:
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浏览器支持captureEvents。在整个代码的上下文中,需要这些行吗?
欢迎任何有见识的评论,批评和建议。谢谢! :)
答案 0 :(得分:0)
我一直在使用try / catch方法,并且它对我当前的项目工作得很好。请查看以下代码段:
var request;
try {
request = new XMLHttpRequest(); // standard
}
catch (e) {
request = new ActiveXObject("Microsoft.XMLHTTP"); // workaround
}
以上示例应适用于所有浏览器返回Internet Explorer 5.0;当然,你不能支持所有古老的浏览器,但是嘿,不管怎么说,Mosaic都不会说JavaScript。
因此,您可以“尝试”调用addEventListener,如果您“捕获”错误,则可以调用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函数,该函数可以带走浏览器支持的任何内容。