mt-site.js について(その1:仕組みと動作)
エントリー・アーカイブやコメント・プレビュー画面のヘッダ部分には、
<script type="text/javascript" src="<$MTBlogURL$>mt-site.js"></script>
という設定があります。
この mt-site.js は、エントリー・アーカイブやコメント・プレビュー画面でのコメント・トラックバック欄の表示・非表示および、TypeKey認証時のコメンター情報や投稿フォームの表示を制御するためのものです。
以下、mt-site.js の仕組みおよび動作について説明します。
1.インタフェース
mt-site.js では下記のインタフェース(関数)が定義されています(内部で利用されるインタフェースは省略しています)。
- rememberMe:cookie に投稿者情報(名前・メールアドレス・URL)を保存
- forgetMe:cookie から投稿者情報(名前・メールアドレス・URL)を削除し、フォームデータをクリア
- individualArchivesOnLoad:設定状態によってコメント・トラックバック欄の表示・非表示を制御+cookieからコメント投稿者情報取得
- writeTypeKeyGreeting:TypeKeyサイン・イン/サイン・アウト情報表示を制御
また、mt-site.js が取得された、つまりHTMLのヘッダに記述された冒頭の script 要素が読み込まれた時点で、
- commenter_name
が生成(プログラム的には「変数定義」を指します)されます。commenter_name は TypeKey による投稿者のニックネームで、ニックネームを cookie あるいは Movable Type から取得するコードも同時に生成されます(生成契機は2項参照)。このコードも script 要素が読み込まれる契機に実行されます。
2.生成契機
mt-site.js は、テンプレートの再構築を契機に生成されるダイナミックなスクリプトです。ダイナミックな生成を行う理由は、ブログのコメント・トラックバックの設定内容によってスクリプトの振る舞いを変える必要があるためです。
例えば、コメントを「一切受け付けない」という設定にした場合、エントリー・アーカイブのコメント欄は表示されなくなり、コメント・プレビュー画面は当然それ自体にジャンプできなくなります。
これは設定に応じた mt-site.js が再構築によって自動生成され、エントリー・アーカイブを表示する時にコメント投稿フォーム表示させないように mt-site.js が制御しているためです。
mt-site.js は「インデックステンプレート」として登録されており、「インデックス・テンプレートの再構築」を契機に生成されます(メインページではなく「インデックス・テンプレート」であることに注意してください)。設定の変更を行って「インデックス・テンプレートの再構築」が促された場合は、再構築が必要であることを指します(再構築が不要な場合は表示されません)。
それ以外の契機でインデックス・テンプレートの再構築を行う場合は、再構築画面の「すべてを再構築」または「インデックス・テンプレートを再構築」を選択してください。
また設定画面の TypeKey 登録を行い、インデックス・テンプレートを再構築すると、mt-site.js の最後の辺りに TypeKey 投稿者のニックネームを取得する
if ('user-domain' != 'user-domain') {
document.write('<script src="http://user-domain/mt/mt-comments.cgi?__mode=cmtr_name_js"></script>');
} else {
commenter_name = getCookie('commenter_name');
}
が生成されます。
user-domain 同士を比較している部分は、実際には MTCGIHost と MTBlogHost が展開された値が設定されます。独自ドメインを取得している場合等には cookie からの取得ができない(ホスト名が異なるため)ので、
http://user-domain/mt/mt-comments.cgi?__mode=cmtr_name_js
が実行されます。ちなみにこのURLを実行すると、
var commenter_name = 'hogehoge';
というレスポンスになります。hogehoge の部分がコメンター情報で、つまりコメンター情報が JavaScript として直接HTMLに表示されるという仕組みです。
3.動作
エントリーアーカイブにおける、TypeKey サイン・インした後の TypeKey 関連情報の表示の流れを説明します(設定画面で TypeKey 登録が完了していることを前提としています)。
3.1 ニックネーム取得
ページが表示されると(厳密にはヘッダの script 要素が実行されると)、mt-site.js に記述された、
if ('user-domain' != 'user-domain') {
document.write('<script src="http://user-domain/mt/mt-comments.cgi?__mode=cmtr_name_js"></script>');
} else {
commenter_name = getCookie('commenter_name');
}
が実行されて、cookie あるいは Movable Type より投稿者のニックネームを取得。
3.2 名前・メールアドレスの表示制御
次に、body 要素の individualArchivesOnLoad が実行され、commenter_name が存在する場合は、コメント投稿フォームの名前・メールアドレス欄を非表示に、存在しない場合は表示します。
3.3 サイン・インの表示制御
最後に、投稿フォームの中にある writeTypeKeyGreeting が実行されて、commenter_name が存在する場合は、コメント投稿フォームに
サインインを受け付けました。hogehoge さん。コメントしてください。(サイン・アウト)
と表示し、存在しない場合は、
TypeKey IDを使ってサイン・インしてください。
と表示します。
2005.11.18 追記
本文を修正しました。
- Movable Type 4.2 のブログ記事ページを XHTML 1.0 Strict で valid にする
- dTree を Movable Type 4.1/MTOS のネイティブタグで実装する
- Lightbox JS/Litebox で BlogPet を背景画像の下に隠す
- mt-site.js について(その3:cookie登録の改善)
- mt-site.js について(その2:注意事項)
いつも小粋空間さんのカスタマイズネタにはお世話になっております。
エントリーの中で、
「mt-site.js は、テンプレートの再構築を契機に生成されるダイナミックなスクリプトです。」
と書いてありますが、
MT3.2-ja-2で新規ブログを作成すると、
デフォルトのインデックステンプレートで、
「mt-site.js」ができています。
これはこのエントリーと無関係でしょうか?
>showBOOさん
こんばんは。
紛らわしい表現ですいません。
mt-site.js はテンプレート上に表示されていますが、管理者の情報変更と再構築によって変更されます。
以上です。
それではどうぞよろしくお願い致します。
なるほど、了解しました。
ありがとうございました!
>showBOOさん
こんばんは。
どういたしまして。