2011-06-27 16 views
0

window.onload()がトリガーされたときに外部JavaScriptを読み込むために、http://friendlybit.com/js/lazy-loading-asyncronous-javascript/という指定のテクニックを使用しています。しかし、スクリプト自体にロードイベントハンドラの登録が含まれている場合、イベントが(何らかの形で)渡されると呼び出されないことがあります。確認するために、私は上記のようにロードされている外部のJavaScriptファイルに次のコードを追加しました:ネストされた非同期Javascript

 

(function() { 
    if (window.attachEvent) 
     window.attachEvent('onload', alert("ok")); 
    else 
     window.addEventListener('load', alert("ok"), false); 
})(); 
 

このアラートを実際にonloadイベントが2回呼び出されまたはJavaScriptがロードを意味読み込むないかどうか、私に考えさせるれ表示されますスクリプトは、 "グローバル"部分を実行し、次のリスナーに移動します。後者の場合、グローバルな部分を実行している間に別のリスナーがonloadイベントに追加された場合、この動作は正しいです。しかし、私はこれについては分かりませんし、経験豊かな人がそれを明確にし/確認できるなら、感謝します。

答えて

1

ウィンドウがロードされているときではなく、イベントがアタッチされているときに警告が呼び出されていると思います。これは、アラート関数を実行してから、alertの結果(nullになります)をattachEventの2番目のパラメータとして渡すためです。

何が実行されていることは本質的である:

(function() { 
    var returnValue; 
    if (window.attachEvent) { 
     returnValue = alert("ok"); 
     window.attachEvent('onload', returnValue); 
    } else { 
     returnValue = alert("ok") 
     window.addEventListener('load', returnValue, false); 
    } 
})(); 

あなたは、あなたの質問に記述する何をテストするには、あなたのコードを変更する必要があります

(function() { 
    if (window.attachEvent) 
     window.attachEvent('onload', function() {alert("ok");}); 
    else 
     window.addEventListener('load', function() {alert("ok");}, false); 
})(); 
関連する問題