0

我遇到了一段我想建模的代码。但是,我只是有几个问题,也许你们可以提供帮助。这是代码:

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 
}
*/

我在某处读到 captureEvents 仅受较旧的 Firefox 浏览器支持。在整个代码的上下文中,是否需要这些行?

欢迎任何和所有有见地的评论、批评和建议。谢谢!:)

4

1 回答 1

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 函数,它会带走浏览器支持的任何内容。

于 2012-10-03T14:18:37.473 回答