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

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

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

defer属性をSafariでも使う

Firefoxではscript要素のdefer属性がサポートされていて、これを使うと、DOM構築後に実行したいスクリプトのインデントを一段減らすことができて便利なのだが、Safariではサポートされていない。

<head>
<script defer="defer">
document.body.style.backgroundColor = "#00ffff";
</script>
</head>

どうしても使いたいので、どうにかするスクリプトを書いた。

<head>
<script src="defer.js">
document.body.style.backgroundColor = "#00ffff";
</script>
</head>

defer属性の代わりにscript要素のsrcに"defer.js"を追加するだけで使えるようになる。

javascripter's
gist: 116481 — Gist

(function () {

  var scripts = document.getElementsByTagName("script");
  var me = scripts.item(scripts.length - 1);

  function evaluate() {
    var script = document.createElement("script");
    script.type = me.type;
    script.appendChild(document.createTextNode(me.textContent));
    document.body.appendChild(script);
    document.body.removeChild(script);
  }

  if (document.readyState == "complete")
    evaluate();
  else
    window.addEventListener("DOMContentLoaded", evaluate, false);

})();