私は、Internet Explorer 8 を除くすべてのブラウザーで正常に動作する jQuery を使用しています (おそらく、以前のバージョンではそれほど心配していませんが)。jQuery の .each 関数を使用して、使用しているかなり柔軟性のない CMS によってページに自動生成された JavaScript 配列のすべての要素をループしています。
たとえば、私の CMS は、次の画像オブジェクトの配列を JavaScript でページに書き込みます。
paths = [];
paths[0] = new Image();
paths[0].src = "/path/to/image1"
paths[1] = new Image();
paths[1].src = "/path/to/image2"
paths[2] = new Image();
paths[2].src = "/path/to/image3"
paths[3] = new Image();
paths[3].src = "/path/to/image4"
次に、jQuery の各関数を使用して、この配列をループ処理し、すべての画像を小さな順不同リストで返します。
問題は、jquery の使用中に
$(document).ready(function() { ... });
FF / Safari / Chromeなどで正常に動作しており、実際に順序付けされていないリストをすぐにレンダリングできる.画像配列のコードの後に含まれています)。IE で「paths is null/undefined」エラーがスローされるため、これを知っています。
から変えたところ
$(document).ready(function() {
に
$(window).load(function() {
私のコードは、ページ全体がロードされた後にのみ jquery の「各」関数を実行するため、IE で正常に機能しました (レンダリング時間が遅くなり、やろうとしていることで「ラグ」が発生するため、これは最悪です...しかし、それが機能する場合はちょっと)。ただし、Web サイトがキャッシュされている場合、「パス」という名前の配列が存在することを登録する前に、IE が $(window).load を使用しているときに各関数を起動することがあるようです。
私の各関数が失敗しないように、パス変数がIEによってすぐに登録されることを確実にする確実な方法を誰かが知っていますか?