window.onloadが2回以上あるとき

window.onloadを同一ページ内でうっかり2回使ってしまうと、1回目の処理は行われず、後者のイベントに上書されてしまいます。

window.onload=function(){
  //色々な処理
}

window.onload=func2; //2回目

これは、windowオブジェクトのプロパティonloadに関数を参照渡しているだけにすぎないということを理解しておくことが必要。
イベント発生時にブラウザがもれなく、複数登録したonloadをキャッチして順次呼び出すということにはならず、一番最新のonloadを実行するということ。

onload時に1回目〜2回目のように順番に実行されるという錯覚を起こしてはいけない。

単純には以下と同じ

var o={}; 
o.s="好き!";  //1回目の処理(のつもり)
o.s="やっぱり嫌い!";  ///2回目の処理(のつもり)

//いざ呼び出す
o.s;  // "やっぱり嫌い!"


そこで、イベントの割り当てにはaddEventListenerがあったりするのだけど、
これはonloadの実行待ち関数を作るというTipsメモ。

function addLoad(func){
  var oldonload=window.onload;
  if(typeof window.onload!='function'){
    window.onload=func;
  }else{
    window.onload=function(){
      oldonload();
      func();
    }
  }
}

addLoad(func);

このように呼び出せば、onloadが定義済みかどうか判定し、順次実行される。




透明感があって伸びのある声がいい。ノルウェー