準備

CRCHalo4iBlog.js を使用して web ページに HaloScan のコメントの RSS の内容を表示させる前に次の事項を確認/決定しておくこと。
CRssFeed.js の URL
トップページ「CRssFeed.js」から CRssFeed.js をダウンロードし、それを自分の web サーバにアップロードしておく。そしてその URL を確認しておくこと。ダウンロード前の CRssFeed.js を直接使用するとバージョンアップ、ページやダウンロード元の変更などで予期せず使えなくなる可能性がある。
CRCHalo.js の URL
トップページ「CRssFeed.js」から CRCHalo.js をダウンロードし、それを自分の web サーバにアップロードしておく。そしてその URL を確認しておくこと。ダウンロード前の CRCHalo.js を直接使用するとバージョンアップ、ページやダウンロード元の変更などで予期せず使えなくなる可能性がある。
CRCHalo4iBlog.js の URL
トップページ「CRssFeed.js」から CRCHalo4iBlog.js をダウンロードし、それを自分の web サーバにアップロードしておく。そしてその URL を確認しておくこと。ダウンロード前の CRCHalo4iBlog.js を直接使用するとバージョンアップ、ページやダウンロード元の変更などで予期せず使えなくなる可能性がある。
RSS の内容を表示する web ページ中の位置
自分の web ページの中のどの位置に RSS の内容を表示させるかを予め決めておくこと。
RSS の パス
HaloScan のコメントの RSS のコピー の URI。これは http:// で始まる絶対 URL ではなく、/ で始まる絶対パスか、/ で始まらない相対パスのどちらかを確認しておくこと。実際に使用する RSS は表示させる web ページと同じ web サーバ上になければならない。コメントがあるたびに元の RSS は更新されるので定期的にコピーする必要がある。これを自動化するために「HaloScan のための CacheUpIt の設置手順」を参照して同期すること。
iBlog のバージョン
iBlog のバージョンは 1.3.8 以降を前提としている。1.3.8 以降の iBlog で作成された CommonLib.js にはエントリ ID からカテゴリ ID を求める JavaScript 関数が用意されていて、これを利用するからである。

手順

CRCHalo4iBlog.js を使用する手順は次の通りである。なおここで示している例は XHTML 1.0 Transitional による XHTML である。
  1. ヘッダに
    <script type="text/javascript" src="CRssFeed.js の URI" charset="UTF-8"></script>
    <script type="text/javascript" src="CRCHalo.js の URI" charset="UTF-8"></script>
    <script type="text/javascript" src="CRCHalo4iBlog.js の URI" charset="UTF-8"></script>
    <script type="text/javascript" src="ブログのベース URICommonLib.js" charset="UTF-8"></script>
    を入れる。
    <head>

    <script type="text/javascript" src="CRssFeed.js" charset="UTF-8"></script>
    <script type="text/javascript" src="CRCHalo.js" charset="UTF-8"></script>
    <script type="text/javascript" src="CRCHalo4iBlog.js" charset="UTF-8"></script>
    <script type="text/javascript" src="/myname/iblog/CommonLib.js" charset="UTF-8"></script>

    </head>
    入れ替え事項の説明
    CRssFeed.js の URI
    自分用にアップロードした CRssFeed.js の URI。
    CRCHalo.js の URI
    自分用にアップロードした CRCHalo.js の URI。
    CRCHalo4iBlog.js の URI
    自分用にアップロードした CRCHalo4iBlog.js の URI。
    解説
    ヘッダとは HTML 中の head 要素(<head> から </head> まで)のことである。ここで JS ファイルをロードするのが基本。しかし、何らかの都合でヘッダに入れたくない場合もあり得る。その場合はその web ページで最初に CRCHalo クラスを使用する場所より前に上記 script 要素を入れればよい。script 要素を入れることができるのは head 要素か body 要素の中である。それ以外の場所に入れてはならない。
  2. RSS を表示する場所に <div id="表示箇所の ID 属性値">JavaScript が無効かエラーが発生しているときの文言</div> を入れる。
    <body>

    <div id="RecentComments">JavaScript が無効か何らかのエラーが発生しています。</div>

    </body>
    入れ替え事項の説明
    表示箇所の ID 属性値
    RSS を表示する場所を一意に識別するためのもので、その web ページ中で他の ID 属性値と重ならないものでなければならず、英字で始まり英数字と _ による文字列でなければならない。大文字と小文字は区別される。
    JavaScript が無効かエラーが発生しているときの文言
    RSS の表示において何らかのエラーが発生していて何もそこに書き出せないときに表示される文言で、JavaScript が使えないブラウザや、使えても無効になっているブラウザでも表示される。
    解説
    RSS の内容を表示するための「箱」をここで準備する。RSS の内容はこの箱の中に出力される。
  3. 直後に次のコードを入れる。
    <script type="text/javascript"><!--
        var CRCHalo4iBlog クラスオブジェクトの変数名 = new CRCHalo4iBlog(
            'RSS のパス',
            document.getElementByID('表示箇所の ID 属性値'),
            true,
            'ブログのベース URI'
        );
        CRCHalo4iBlog クラスオブジェクトの変数名.LoadInterval(true);
    // --></script>
    <script type="text/javascript"><!--
        var RecentComments = new CRCHalo4iBlog(
            '/myname/iblog/haloscan.xml',
            document.getElementByID('RecentComments'),
            true,
            '/myname/iblog/'
        );
        RecentComments.LoadInterval(true);
    // --></script>
    入れ替え事項の説明
    CRCHalo4iBlog クラスオブジェクトの変数名
    RSS を表示するためのデータと機能が一つにまとめられた「オブジェクト」に付ける名前。英字で始まり英数字と _ による文字列でなければならない。大文字と小文字は区別される。他の JavaScript の変数と重なってはならない。
    RSS のパス
    表示する web ページから見た RSS のパス。ここに http:// で始まる絶対 URL を指定すると読み込めなくなる。使えるのは / で始まる絶対パスか、/ で始まらない相対パスのどちらか。
    表示箇所の ID 属性値
    ステップ 2 で書いた 表示箇所の ID 属性値
    ブログのベース URI
    iBlog によるブログのトップページの URI から index.html を差し引いたもの。ここは http:// から始まる表記でも構わない。
    説明
    ステップ2 で準備した「箱」に最近のコメントを表示させるための JavaScript コードをここで記述している。HaloScan の一つのアカウントを複数のブログで使用していても、
  4. 直後に <noscript>JavaScript が使えないブラウザ用の文言</noscript> を入れる。
    <noscript>JavaScript が使用できない場合は直接 <a href="/myname/iblog/haloscan.xml">RSS</a> を参照してください。</noscript>
    入れ替え事項の説明
    JavaScript が使えないブラウザ用の文言
    JavaScript が使えないブラウザや JavaScript が無効に設定してあるブラウザ向けの内容。RSS と同等な内容か、同等な内容にアクセスするための手段を提供する。HTML 4.01 Strict や XHTML 1.0 Strict あるいは XHTML 1.1 では noscript 要素の中に a 要素を使用できないので注意が必要。代替手段のためのリンクを記述したい場合は HTML 4.01 Transitional や XHTML 1.0 Transitional を使用しなければならない。
    説明

    Web アクセシビリティの指針を示した JIS 規格 X 8341-3 には script タグをサポートしていないウェブブラウザのために、noscript 要素を使ってそこにスクリプト言語があること及び代替手段を利用者に知らせる。 とある。HaloScan によるコメントが単一スレッドの場合はそのスレッドの URL を示せばよいが、大抵の場合スレッド ID は複数あるはずだし、ブログのコメントに使用しているのならばそれは日々増えてゆく。更にコメントは自分で付けるのではなく人が付けるのだからどれが最近のコメントかを予め把握できない。つまり代替手段を予め静的に特定することができないのだ。

    ここは涙を飲んで RSS 自身を代替手段として示すしかないだろう。あるいは CacheUpIt のファイル加工機能を利用して RSS を静的な HTML に変換してアップロードし、それへのリンクを代替手段とするという方法もある。

出力内容

CRCHalo4iBlog クラスオブジェクトによる RSS の出力は次のようになっている。実際には改行はない。
コメントが一つ以上あるとき
<dl>
<dt><a href="item 要素の link 要素の内容">スレッド ID : 投稿者名</a></dt>
<dd>コメントの内容</dd>

</dl>
コメントが一つもないとき
コメントが一つもないときの文言
要素とは、開始タグから終了タグ全体を言う。HTML で例を挙げると例えば、<a href="index.html"> から </a> までを a 要素という。href="index.html" の href は属性名、index.html は属性値、a 要素の href 属性の値は index.html ということになる。そして開始タグと終了タグの間の内容は子供要素ということになる。
以下、可変の項目について説明する。
item 要素の link 要素の内容
一つのコメントの URL。
スレッド ID
そのコメントが所属しているコメントスレッドの ID。iBlog ならば通常はエントリ ID になる。
投稿者名
そのコメントを投稿した人が自分の名前もしくはハンドルとして入力した文字列。
コメントの内容
コメントの内容をなるべく実際にそのコメントを参照したときと同じように表示されるように加工した HTML。HaloScan コメントの RSS ではコメントの内容から一切のタグが省かれているのでリンクや b タグや i タグなどは再現できない。
コメントが一つもないときの文言
これは表示すべきコメントが一つもない場合に <dl></dl> と意味のない出力になるのを防ぐための文言。詳細は後述する。

CSS による表示のカスタマイズ

出力される HTML のカスタマイズではなくその表示のカスタマイズなら、JavaScript の知識がなくともできる。まず、RSS の内容が出力されるのは ID 属性によってその web ページの中で一意に決まった場所だということに着目する。ID 属性で特定される部分の CSS を書けば RSS の内容の表示をカスタマイズすることができる。それは「状況依存セレクタ」というものを使う。以下にその例を幾つか挙げる。表示箇所の ID 属性値 として RecentComments という値を指定したものとする。
小さめの文字にする
#RecentComments {
    font-size:  smaller;
}
コメントの内容をインデントさせない
#RecentComments dd {
    padding-left:   0em;
    margin-left:    0em;
}
コメントの内容を表示しない
#RecentComments dd {
   display:    none;
}
コメントの内容を最初の一行だけ表示する
#RecentComments dd {
   height:     1em;
   overflow:   hidden;
}

動作のカスタマイズ

CRssFeed.js の使用方法」の「動作のカスタマイズ」で述べたカスタマイズは全て同じように行うことができる。そのセクションに書かれた CRssFeed を CRCHalo に読み替えればよい。ここでは CRssFeed クラスのサブクラス(CRssFeed を元に作成した機能とデータの固まり)である CRCHalo で追加されたカスタマイズ可能な事項について説明する。
コメントが一つもないときの文言を変更する

デフォルトではコメントが一つもないときは「誰かコメントください (T_T)」となっている。これを変えることができる。例えば「まだコメントはありません。」とするならば ステップ 3CRCHalo クラスオブジェクトの変数名.LoadInterval(true); という行の直前に次の行を入れればよい。

CRCHalo クラスオブジェクトの変数名.m_NoCommentsMessage = 'まだコメントはありません。';
顔文字をアイコン化しない

デフォルトでは :) や ;) などの顔文字を HaloScan が用意しているアイコンに変換するようになっている。HaloScan の設定で顔文字をアイコン化しないように設定しているときは CRCHalo クラスオブジェクトによるコメントの内容の表示でも同じようにアイコン化しないようにした方がよい。その場合はステップ 3CRCHalo クラスオブジェクトの変数名.LoadInterval(true); という行の直前に次の行を入れればよい。

CRCHalo クラスオブジェクトの変数名.m_UseFaceIcon = false;
コメントアンカーの前置/後置文字列を指定する

HaloScan では個々のコメントの URL は、そのコメントスレッドの URL の後ろに #NNNN という感じで、スレッド全体のどこかという「アンカー名」が付けられて示される。この NNNN の部分は数字のみになっているが、実はここが数字のみというのは XHTML では間違いで、最初の文字は英字でなければならない。

これは HaloScan のテンプレートをカスタマイズすれば解消可能なのだが、HaloScan コメントの RSS のテンプレートはないので RSS の方まではユーザで補正することができない。このためテンプレートで補正をしている場合 RSS に示された各コメントへの URL をそのまま使用すると、そのコメントへジャンプできずそのコメントが所属するコメントスレッドへのジャンプするだけになってしまう。

そこでテンプレートで HaloScan 側が間違っていることを補正している人向けに NNNN の部分の前に特定の文字列を挿入できるようになっている。例えば NNNN の前に挿入する文字列を「C」指定するときは ステップ 3CRCHalo クラスオブジェクトの変数名.LoadInterval(true); という行の直前に次の行を入れればよい。

CRCHalo クラスオブジェクトの変数名.m_AnchorPrefix = 'C';

前に挿入する文字列が指定できるのだから、ついでに後ろに挿入する文字列も指定できるようになっている。後ろの場合は上の m_AnchorPrefixm_AnchorPostfix に差し替えて指定する。

XHTML の場合

上記手順で示したコードは HTML 用である。HTML では scirpt 要素で JavaScript を書くとき、その script 要素の内容をコメントにして script 要素を理解しないブラウザに JavaScript コードが表示されてしまうのを防ぐのが通常だ。

しかしながら XHTML で web ページを記述していてなおかつそれが web サーバによってそのページのメディアタイプが application/xhtml+xml、application/xml、text/xml などとされる場合はこの措置はまずい。なぜならば XML では -- したがって XHTML では -- コメントは本当にコメントとして扱われてしまうからだ。このため <!-- --> で囲まれた部分は JavaScript コードではなくコメントとされてしまう。その場合は <!-- --> の代わりに <![CDATA[ ]]> を使えばよい。

しかし、多くの場合は XHTML で書かれた web ページであってもそうする必要は無い。というのは拡張子が html のとき web サーバはそのページのメディアタイプを text/html とする場合が多いからである。少なくとも .Mac の web サーバはそうなっている。