Addicted to Mac

こころおどるコンピュータ。

Firebugを使えばJavascriptで動的出力されたソースコードを見られる

text:
Firebug

これと、あとは使いやすいエディタさえあればもしかしてDreamweaver要らない?と思ってしまうほどお世話になっているFirebug。CSSコーディングするウェブデザイナーには御用達のFirefoxアドオンなわけですが、Ajaxコーダーにとっても結構便利な存在かも。

当ブログトップページのサイドエリアには、右図のように自分のdel.icio.usブックマークを表示させています。この部分はちょこっとAjaxな仕組みを使っていて、具体的にはdel.icio.usのAPIを叩いてJSONを取得し動的にXHTMLを出力しています。

通常JavaScriptによって動的に出力された部分のソースコードはブラウザでは見ることが出来ず、その部分にもCSSデザインを施したいという場合には、出力されるソースコードを想像しながらCSSを書いて、実際に適用されるかどうかのトライ・アンド・エラーをするしかありません。もっとも、こういった動的出力部分は先にデザイナーがデザインしてコーディングして、エンジニアに「こういう風に出力されるようにスクリプト書いてくれ」と頼むのが普通でしょうが...。と考えると、むしろそのエンジニアにとって便利な小ネタです。

上述のdel.icio.usリンクを表示させるのに使用しているスクリプトは下記の通り。この出力結果のソースコードがどうなるか直ぐに想像がついてしまう人は素晴らしいと思います。僕だったら「これにCSSでデザイン被せてね」などと投げられたら、ちょっとイヤです。しかもスクリプトとしてこれはまだ短い方で、より長いスクリプトだったらお涙もの。

  1. <script type="text/javascript">
  2. //<![CDATA[
  3. function showImage(img, dt) {
  4. return ( function() { img.style.display='inline'; dt.style.backgroundImage = 'none'; } );
  5. }
  6. var ul = document.createElement('ul');
  7. ul.id = 'deliciousList';
  8. ul.className = 'x-small';
  9. for (var i=0, post; post = Delicious.posts[i]; i++) {
  10. var li = document.createElement('li');
  11. var dl = document.createElement('dl');
  12. var dt = document.createElement('dt');
  13. var dd = document.createElement('dd');
  14. dt.style.position = 'relative';
  15. var a = document.createElement('a');
  16. a.style.marginLeft = '20px';
  17. var span = document.createElement('span');
  18. var img = document.createElement('img');
  19. img.style.position = 'absolute';
  20. img.style.left = 0;
  21. img.style.top = 0;
  22. img.style.display = 'none';
  23. img.height = img.width = 16;
  24. var imgsrc = post.u.split('/').splice(0,3).join('/')+'/favicon.ico';
  25. img.src = imgsrc;
  26. img.onload = showImage(img, dt);
  27. a.setAttribute('href', post.u);
  28. a.setAttribute('target', 'blank');
  29. a.appendChild(document.createTextNode(post.d));
  30. span.appendChild(document.createTextNode('NOTE: '));
  31. dd.appendChild(span);
  32. dd.appendChild(document.createTextNode(post.n));
  33. dt.appendChild(img);
  34. dt.appendChild(a);
  35. dl.appendChild(dt);
  36. dl.appendChild(dd);
  37. li.appendChild(dl);
  38. ul.appendChild(li);
  39. }
  40. document.getElementById('delicious').appendChild(ul);
  41. //]]>
  42. </script>

ブラウザの [ソースを見る] 機能では先ほども述べた通り、出力結果のソースを確認することはできません。しかしFirebugでソースを見れば

FirebugのHTMLタブによる表示
※以下はスクリーンショットの一部です。波線囲い部分は別途画像加工。

見えちゃう♥

動的出力部分は上図の波線で囲まれた部分に相当するわけで、これを見ればデザイン被せる作業は通常となんら変わりありません。エンジニアとしては自分の書いたスクリプトが正しく機能しているか確認もしやすいです。もっと言っちゃうと、他のウェブサービスのAPIなどで提供される出力結果にDOMを使ってCSSデザインを被せちゃうということも多分できますねえ。

というわけで、実は最近これに気づいて鼻息あらめなわけですが、みんなもう知っていたらカワイイ奴だと思って温かく見守ってやってください。