window.onload に関数をスタックする

addEventListener を使わないで、window.onload に直接関数を登録すると、既に登録されている関数がある場合上書きされてしまって困る場合がある。そんなときは以下のように書けばOK。

/**
 * window.onload に関数 func をスタックする
 */
function addOnLoad(func) {
  // window.onload に関数が登録済みか
  if (typeof window.onload == "function") {
    var _func = window.onload;
    window.onload = function() {
      // t: window.onload で登録済み関数を呼び、次に func を呼ぶ
      _func();
      func();
    }
  } else {
    // f: window.onload で func を呼ぶ
    window.onload = func;
  }
};

/**
 * 何か意味のある関数
 */
function hoge() {
  // 何か意味のある処理が書いてあることにする
};
// 自分で定義した関数 hoge() を onload イベントに登録する
addOnLoad(hoge);


ちなみに、多くのライブラリにはこの機能が既にあるらしいので、このようにわざわざ長たらしく書く必要は無いらしいけど、基本が大事ということでメモしてみた。