愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

DOMContentLoadedに引っ掛けて初期化を行う外部スクリプトを、DOMが出来てからアレアレする

だいたい以下のような感じでうまくいくんじゃないかと思うけど、ちゃんとした検証はしてないので。WebKitでしかみてませんし。

引数のtargetはwindowやdocument, scriptはsrcが設定されたscript elementだと思いねえ。

(※イベントハンドラ内でevt.targetとかを参照するようなヤツはこれだとダメです)

function hijackDOMLoaded(target, script) {
    var orig = target.addEventListener, callbacks = [];
    target.addEventListener = function(type, cb, useCapture) {
        if ( type === "DOMContentLoaded" ) {
            callbacks.push(cb);
        }
        else {
            orig.call(target, type, cb, useCapture);
        }
    };

    script.onload = function() {
        target.addEventListener = orig;
        callbacks.forEach(function(cb) { cb(); });
    };
    document.body.appendChild(script);
}