昨晩から、サイドバーの表示が崩れたり直ったりで大いに悩んだが、理由がわかった。
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の広告表示はナシとさせていただく。
ブログのデザインをカスタマイズしていたのですが、HTMLテンプレートを誤って修正していたため、個別記事が正常に表示されず、リンク先がブログのトップページに飛ぶようになっていました。
(現在は修正し、正しく表示されるようになっています)
当方の非常に初歩的なミスにより、ご迷惑をおかけしたこと、再度お詫び申し上げます。