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 に答える