document.lazy_writer

ここにAdsenseが入る1

これは何

ソース

最新
古いバージョン

使い方

このページはこんな感じになってます。
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が入る2

adsenseのコードは改変していません。
実際には配信される広告の大きさに合わせてCSSで事前に大きさを指定しておくと良いでしょう。