このページではRWルールのユーザ定義スクリプトについて説明します。
注意) ユーザ定義スクリプトを作成するには、JavaScriptとDOMに関する知識が必要です。
RSSやスレッドの各記事は以下の順に処理されて描画を行います。 RWルールはこのうち2番と5番の2回実行されます。
ユーザ定義ルールのスクリプト欄には、上記RWルールのフェーズ1と2で実行される、JavaScriptのコードをそのまま入力してください。
このスクリプトが行うことは、正に各記事のテキストデータやDOMデータを直接操作することです。 例えば、ソースのテキストをreplaceで書き換えたり、DOMのgetElementsByTagNameでタグ要素を取得して属性を書き換えるなど、JavaScriptで行えることは全てできます。
以降ではスクリプトに渡ってくる変数とその内容を、基本的なコードを交えて説明していきます。
「draw」という変数は、ユーザ定義スクリプトに渡される唯一のオブジェクトです。以下にdrawオブジェクトのプロパティを列挙します。
| プロパティ名 | 内容 |
|---|---|
| phase | RWルールの実行フェーズを表す数値。 1: テキストデータの書き換え 2: DOMデータの書き換え |
| type | データの種類を表す文字列。 "rss": RSSの記事 "dat": スレッドのメッセージ |
| rssMode | データがRSSのときに、RSSの表示モードを表す文字列。 "text": テキストモード "html": HTMLモード |
| itemText | RWルール・フェーズ1のテキストデータを格納するオブジェクト。 |
| itemElem | RWルール・フェーズ2のDOMデータを格納するエレメント。 |
| pageInfo | 表示しているページの情報を格納するオブジェクト。 |
ユーザ定義のスクリプトが一番最初に行うことは、RWルールの呼ばれた状態を把握することです。
目的のフェーズかどうか? 目的のRSS表示モードかなどを判断して、違う場合はすぐに終了します。
// 目的のフェーズでなければ終了 if (draw.phase != 2 || draw.type != "rss" || draw.rssMode != "html") return; // この先、RSSのHTMLモードでDOMを操作するコードが続く
RWルール・フェーズ1では、「draw.itemText」に格納されたテキストデータを書き換えてください。
「draw.itemText」のプロパティを以下に列挙します。(RSSとスレッドでプロパティが違います)
| プロパティ名 | 内容 |
|---|---|
| title | RSS記事のタイトル |
| link | RSS記事のリンクアドレス |
| date | RSS記事の日付 |
| author | RSS記事の作者 |
| body | RSS記事の本文 |
| プロパティ名 | 内容 |
| name | スレッド記事の名前 |
| スレッド記事のメールアドレス | |
| date | スレッド記事の日付 |
| id | スレッド記事のID |
| be | スレッド記事のBE |
| body | スレッド記事の本文 |
// 目的のフェーズでなければ終了 if (draw.phase != 1) return; // 本文の改行タグを全て削除 draw.itemText.body = draw.itemText.body.replace(/<br>/g, "");
RWルール・フェーズ2では、「draw.itemElem」に格納されたDOMデータを書き換えてください。
「draw.itemElem」が指し示すものは、本文のDOMエレメントそのものです。 (タイトル行のDOMエレメントはpreviousSiblingで参照できますが、タイトル行は書き換えないでください。)
// 目的のフェーズでなければ終了
if (draw.phase != 2) return;
// リンクを抽出
var list = draw.itemElem.getElementsByTagName("A");
for (var i=0; i<list.length; i++) {
// リンクが既知のJPG画像を指しているなら表示
if (list[i].href.match(/^http:\/\/known-host\/.*\.jpg$/i)) {
var img = document.createElement("IMG");
img.src = list[i].href;
list[i].parentNode.insertBefore(img, list[i]);
}
}
DOM操作の煩わしさを軽減するため、「draw.insertHTML」というメソッドを用意しています。
書式: draw.insertHTML(DOMエレメント, HTMLテキスト, [挿入位置])
このメソッドはDOMエレメントの前にHTMLテキストを挿入します。 DOMエレメントの後にHTMLテキストを挿入したい場合は、3番目の引数にtrueを指定してください。
先の例をdraw.insertHTMLで書き直すと次のようになります。
// リンクを抽出
var list = draw.itemElem.getElementsByTagName("A");
for (var i=0; i<list.length; i++) {
// リンクが既知のJPG画像を指しているなら表示
if (list[i].href.match(/^http:\/\/known-host\/.*\.jpg$/i))
draw.insertHTML(list[i], '<img src="'+list[i].href+'">');
}
「draw.pageInfo」で表示しているページの情報を得ることができます。
条件判定などで必要があれば参照してください。(このページ情報は絶対に書き換えないでください。)
「draw.pageInfo」のプロパティは以下の通りです。
| プロパティ名 | 内容 |
|---|---|
| title | ページのタイトル |
| url | ページのURLアドレス |
| link | ページのリンクアドレス |
| tag | ページのタグ |
ユーザ定義スクリプトのデバッグについて。
パーサーエラーなどの単純な間違いは、ルール追加ダイアログのOKボタンを押した時点で判断できます。
スクリプトの実行中に発生したエラーについては、設定画面の該当するルールの横に表示します。
スクリプトを高度にデバッグする機能はありませんので、期待通りの動作をしない時などは、変数値やメッセージを出力するなどして確認してください。