var adsense_url = 'http://pagead2.googlesyndication.com/pagead/show_ads.js';
document.lazy_writer(adsense_url, function(str){
var id = "adsense_" + this.script_count;
document.getElementById(id).innerHTML = str;
}, {delay : 2000});
document.lazy_writer(url, callback, option)で、document.writeの代わりに呼び出されるcallback関数を指定します。
指定されたURL毎にセッションが作られます。optionは任意です。
callback関数には第一引数として連結された文字列が渡されます。 そのscriptの中で実行されたdocument.writeに渡された文字列を連結されたものです。 多くの場合は単にこれをinnerHTMLに代入すればよいでしょう。 複数回呼ばれた場合に特殊な処理をしたい場合はthis.contextを使ってください。 thisにはsessionが渡されます。sessionはハッシュで、以下のキーが定義されています。 script_count // 指定したURLでdocument.writeが呼ばれた回数(複数回呼ばれてもscriptごとに一回だけカウント) call_count // 指定したURLでdocument.writeが呼ばれた回数(毎回カウント) context // document.writeに渡された文字列の配列。描画が完了するとクリアされる。 stash // 作業用に使えるハッシュ。共有される。 timer // 描画待ちのsetTimeoutの返値。 delay // setTimeoutに指定する待ち時間。デフォルトは0ミリ秒。 current_script // 現在実行しているscriptのHTMLElement Adsenseを二回張った場合、script_countは2になります。call_countは4になります。 stashは共有されていて変数を引き継ぐことができます。 別のURLに対してlazy_writerを定義した場合は別のstashです。二つ目のscriptが実行される際には、一つ目のscriptのlazy_writerは強制的に実行され、contextがクリアされます。
document.writeをハックしてHTMLの末尾にadsenseのコードを張れるようにしています。
↓ここに入ります。
adsenseのコードは改変していません。
実際には配信される広告の大きさに合わせてCSSで事前に大きさを指定しておくと良いでしょう。