素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

DOM構築後に実行する、すでにDOMが構築されてても実行する

addEventListener("DOMContentLoaded")だと、DOM構築後にリスナを設定した場合一度も呼ばれないので、ブックマークレットのようにいつ実行されるか分からないような時には使えない。
WebKitだと、document.readyStateがあるから、それを使えばいいけど、Firefoxにはない。

function ready(fn) {
  if (ready.loaded) {
  fn();
  return;
  }
  var script = document.createElement("script");
  script.defer = "defer";
  script.type = "text/javascript";
  script.src = "data:text/javascript,void 0";
  script.onload = function () {
    fn();
    ready.loaded = true;
  };
  document.documentElement.appendChild(script);
  document.documentElement.removeChild(script);
}
ready.loaded = false;

ready(function () {
  document.body.appendChild(
    document.createTextNode(new Date().toLocaleString()));
})