昨晩から、サイドバーの表示が崩れたり直ったりで大いに悩んだが、理由がわかった。

Livedoor Blogでは、<$Advertise$>というテンプレートの中身が、以下のような感じで展開される。

<script language="JavaScript">
<!--
var ad_tag = '<scr' + 'ipt language="JavaScript" ';
var templateid = 1340;
var e = document.getElementById("ad");
if(e && e.style.width == '380px')
    templateid = 1380;
ad_tag += 'src="http://www.blogclick.jp/js.cgi?charset=EUC-JP&templateid=';
ad_tag += templateid;
ad_tag += '&blogid=17&matchurl=';
ad_tag += 'dankogai';
ad_tag += '"';
ad_tag += ' charset="euc-jp"></scr' + 'ipt>';
document.writeln(ad_tag);
//-->
</script>

このJavascriptによって書かれたHTMLが壊れたら、表示全体が壊れるのは自明で、案の定設定で[BlogClickの掲載設定]で[掲載しない]に設定して再構築したところ、表示の崩れは解消された。ただし、この手は有料オプションでしか使えない。

さらに調べてみる。

% GET 'http://www.blogclick.jp/js.cgi?charset=EUC-JP&templateid=1340&blogid=17&matchurl=dankogai'
<!--
document.write('<div>');
document.write('<iframe src="http://send.microad.jp/mad.cgi?charset=EUC-JP&templateid=1340&blogid=17&matchurl=http://blog.livedoor.jp/'+ 'dankogai' +'/&group=dankogai&cssid=dankogai"');
document.write('width="340"');
document.write('height="105"');
document.write('scrolling="no"');
document.write('frameborder="no"');
document.write('align="center"');
document.write('marginwidth="0"');
document.write('marginheight="0"');
document.write('allowTransparency');
document.write('>');
document.write('</iframe>');
document.write('</div>');
//-->

見てのとおり、BlogClickはさらにhttp://send.microad.jp/mad.cgiを使って広告を取り寄せ、それが最終的に表示されるのだが、この時に事故が起こると、<div>タグが閉じない状態になるようだ。実際http://send.microad.jp/mad.cgiへのアクセスはさっき試した限りでは結構不安定だった。

もう少し、ちゃんとしませんか?>BlogClick、いやCyberAgent。

Dan the Livedoor Blogger

追記:お、Livedoor Blogの方でも状況を確認しているようだ。

livedoor Blog 開発日誌:BlogClickの表示トラブルにつきまして - livedoor Blog(ブログ)
現在、ブログに広告(BlogClick)を掲載いただいているブログにおいて、サイドバーがずれて表示される、などの現象が発生しております。BlogClickの表示トラブルが原因で、現在対応を行っております。

しかし、はっきり言ってBlogClickのSolutionはショボイ上、技術的にも不安だ(なにせあのよく表示が止まるアメブロと作っているところが一緒。もうはっきり言うぜ)。というわけで、BlogClickの広告表示はナシとさせていただく。