ページロード後に外部スクリプトのdocument.writeを実行する方法の間違いを直す

Tsukasa OISHI

javascriptの実行中に外部スクリプトを実行する方法で、document.writeにハマる
上の記事で書いたスクリプトは重要なことをひとつ忘れていました。
それは書き換えたdocument.writeを元に戻すことです。これを忘れていたためにIEで戻るボタンを押すとブラウザが落ちるという事象に遭遇してしまいました。

で、どのタイミングで元に戻すかで、ちょっと悩んだ。外部スクリプトの実行が終わったあとが最適なんだけど、それを知る手段がなさそうだったから。でもネットを探っていたら、
setTimeoutの実行は、functionの評価が終わってから
こんな記事を見つけた。これを使えばうまいことをできそうです。

var document.write_original = document.write;
var buffer = [];

function notice_end() {
        document.write = write_original;
        $('sample').innerHTML = buffer.join("");
}

document.write = function(){
        setTimeout(notice_end, 0);
        for(var i=0; i < arguments.length; i++){
                buffer.push(arguments[i]);
        }
};

(document.writeを使う外部スクリプトを実行)

こんな感じでうまく動きました。setTimeoutの動きはおもしろいな。こんな書き方ができるjavascriptもおもしろい。