0

ページが IE 6 で完全にレンダリングされる前に、一部の JavaScript を実行すると問題が発生します (他のバージョンもあるかもしれませんが、今のところ IE6 をテストしているだけです。Firefox は問題ないようです)。window.onload次のようにjsを呼び出すことで、これを回避できます。

window.onload = function(){doIt();}

ただし、私の懸念は、既に存在する可能性のある他のものを上書きするという事実ですwindow.onload。コードはライブラリの一部として使用されるため、window.onload他の誰かによって別の場所に設定されないことを保証することはできません。onload次のように、関数をイベントに追加したいと思います。

window.onload += function(){doIt1();}
window.onload += function(){doIt2();}

しかし、そうすると、 だけdoit2()が呼び出されます。ページが完全にレンダリングされたときにイベント ハンドラーを登録する方法はありますか? 2 番目に考えたのは、コードをループ チェックに入れて、実行前にすべてのオブジェクトが存在することを確認することです。しかし、これによりブラウザがロックされる可能性があるのではないかと心配しています。

背景情報として、私のコードは iFrame を非表示/表示しています。iFrame のonload属性を使用できることはわかっていますが、コードを呼び出す前にすべての iFrame を完全にロードする必要があります。

コミュニティから何か考えはありますか?ご入力いただきありがとうございます。

4

1 に答える 1

6

この一般的な addLoadEvent 関数を使用してください...

function addLoadEvent(func) {
  if(typeof window.onload != 'function')
    window.onload = func;
  else {
    var oldLoad = window.onload;

    window.onload = function() {
      if(oldLoad) oldLoad();
      func();
    }
  }
}

これは基本的に、実行する関数をキューに入れます。以前に割り当てられたハンドラーを上書きすることはありません。以下の使用例...

addLoadEvent(function() { alert("One!"); });

addLoadEvent(two);
function two() {
  alert("Two!");
}

jQueryなどのライブラリが、このような既知の問題を処理してくれることをお伝えしたいと思います。

于 2010-01-25T20:58:10.713 に答える