javascriptの実行中に外部スクリプトを実行する方法で、document.writeにハマる
ページのonload後にjavascriptを実行し、その最中に外部のjavascriptファイルを読み込んで実行したかったのだけど、
$('sample').insertHTML = '<script type="text/javascript" src="http://sample/test.js"></script>';
みたいなやり方ではダメだった。だめっぽい雰囲気は漂っていたけど、やっぱりスクリプトを実行してくれない。
いろいろ調べてみて、次のやりかたで解決することがわかった。
var js = document.createElement("script");
js.type = "text/javascript";
js.src = "http://sample/test.js";
$('sample').appendChild(js);
ところが、その外部スクリプトが広告を表示するもので、内部でdocument.writeを使っていると、新たなページを構築しようとするのか白紙になって、しかも処理が返ってこなくなる。
ここでいろいろハマったのだけど、以下のようなやり方で解決した。
document.write_original = document.write;
document.write = function(){
var buffer = [];
for(var i=0; i < arguments.length; i++){
buffer.push(arguments[i]);
}
$('sample').innerHTML = buffer.join("");
};
こうやって、問題のdocument.write自体を書き換えてみた。このあとで、上記の外部スクリプトを実行する処理を行えばOK。
というようなことを、飲み会で終電がなくなったので会社に戻り、カップラーメンを食べたり仮眠を取ったりしてコンタクトの目が超ドライアイな土曜日の朝にやっていたりします。ずっと起きて仕事をしていたみんなは、今就寝中です。そろそろ帰ろうっと。
追記
このままではまだちゃんと動きません。 ページロード後に外部スクリプトのdocument.writeを実行する方法の間違いを直すに続きがあります。