2010-12-26 23 views
2

私はこのコードを本体のスクリプトにロードしています。IEは時々オンロードを起動しません!

(function() { 
attach = function() { 
     blablablablbalabl; 
}; 

if (window.addEventListener){ 
    window.addEventListener('load', attach, false); 
} else if (window.attachEvent){  
    window.attachEvent('onload', attach); 
} 
})(); 

問題は、私はIEをリフレッシュしています(5回の試行のうち4)時々、である、それは文句を言わない)(添付ん! 他のブラウザでは100%の時間を呼び出しています!

私は狂っています!

ありがとうございました

+0

これはattachEvent部分であり、あなたが 'attach()'でやっていることではありませんか? –

+0

はい。私はそれが呼ばれるのを見るためにアタッチメント内に警告を入れます。しかし、そうではありません! – Himberjack

+0

あなたの関数を呼び出すものは、(function())()はそれ自身を実行しません。 –

答えて

1

jQueryのに何この「ポイントを想定したように、IEで例外を投げているかどうかを解決するためにいくつかのトリックを使用するかどうかでありますこの問題。

onreadystatechangeonloadについています。

// If IE event model is used 
    } else if (document.attachEvent) { 
     // ensure firing before onload, 
     // maybe late but safe also for iframes 
     document.attachEvent("onreadystatechange", DOMContentLoaded); 

     // A fallback to window.onload, that will always work 
     window.attachEvent("onload", jQuery.ready); 

     // If IE and not a frame 
     // continually check to see if the document is ready 
     var toplevel = false; 

     try { 
      toplevel = window.frameElement == null; 
     } catch(e) {} 

     if (document.documentElement.doScroll && toplevel) { 
      doScrollCheck(); 
     } 
    } 

さらに、ページがスクロールできるかどうかが継続的にチェックされます。 DOMがロードされると、ページはスクロール可能になり、したがってjQuery.readyがトリガーされます。

// The DOM ready check for Internet Explorer 
function doScrollCheck() { 
    if (jQuery.isReady) { 
     return; 
    } 

    try { 
     // If IE is used, use the trick by Diego Perini 
     // http://javascript.nwbox.com/IEContentLoaded/ 
     document.documentElement.doScroll("left"); 
    } catch(e) { 
     setTimeout(doScrollCheck, 1); 
     return; 
    } 

    // and execute any waiting functions 
    jQuery.ready(); 
} 

あなたのアプリでこの動作を実装したり、jQueryを直接使用することができます。

+1

私はjQueryを直接使用することに投票します。これは、あなた自身が問題を求めているすべてのものを再実装するためです。 –

+0

ええ、ここで同じです。 –

+0

Internet Explorer heaven ...使用をやめてもいいですか? –

0

これは機能しますか?

(function() { 
var callback = null; 
attach = function() { 
     blablablablbalabl; 
     callback.apply(); 

}; 
callback = window.onload; 
window.onload = attach; 
})(); 
+0

isnt window.onloadはIEではあまり良くありませんか? – Himberjack

+0

私はあまりよく分かりません。イメージオブジェクトでもonloadを設定すると、私はこの問題に数回直面しました。イメージがキャッシュからロードされた場合、onloadイベントはトリガされません。 –

0

最近、IEでロードイベントのリスナーを設定する外部スクリプトが発生していないようなことがありました。

私は、スクリプトをドキュメント本体にインライン化すると、確実に起動することに気付きました。私には、外部スクリプトが完全に解析される前にonloadイベントが発生する、ある種の競合状態であったと考えてください。チェックする

他のものがあるイベント伝播をキャンセルする別のスクリプトがあり、あなたの関数コールバックが誤って