TopAjax > Movable Type 4.2 における mt.js の変更点(その1:Ajax 対応と window.onload の代替スクリプト)
News
各種ブログテンプレート
2008年6月11日

エントリー本文

Movable Type 4.2 における mt.js の変更点(その1:Ajax 対応と window.onload の代替スクリプト)

Posted at June 11,2008 12:22 PM
Category:[4.2, Ajax, JavaScript]
Tag:[, , ]

先日、Movable Type 4.2 におけるコメント投稿フォームの機能追加と改善点をエントリーしましたが、動作を制御する mt.js(インデックステンプレートの「JavaScript」)が、新しく実装し直されていますので、気がついたところを紹介したいと思います。

1.Ajax 用関数の追加

mt.js は今までコメントフォーム専用でしたが、検索結果(ページ分割された場合)を Ajax で表示するための関数 mtGetXmlHttp が追加されています。

<mt:Ignore>
/***
 * Returns a XMLHttpRequest object (for Ajax operations).
 */
</mt:Ignore>
function mtGetXmlHttp() {
    if ( !window.XMLHttpRequest ) {
        window.XMLHttpRequest = function() {
            var types = [
                "Microsoft.XMLHTTP",
                "MSXML2.XMLHTTP.5.0",
                "MSXML2.XMLHTTP.4.0",
                "MSXML2.XMLHTTP.3.0",
                "MSXML2.XMLHTTP"
            ];
 
            for ( var i = 0; i < types.length; i++ ) {
                try {
                    return new ActiveXObject( types[ i ] );
                } catch( e ) {}
            }
 
            return undefined;
        };
    }
    if ( window.XMLHttpRequest )
        return new XMLHttpRequest();
}

2.window.onload の代替スクリプト

もうひとつは、JavaScript マスター Dean Edwards 氏による、window.onload の代替スクリプトが追加されています。

// BEGIN: fast browser onload init
// Modifications by David Davis, DWD
// Dean Edwards/Matthias Miller/John Resig
// http://dean.edwards.name/weblog/2006/06/again/?full#comment5338
 
function mtInit() {
    // quit if this function has already been called
    if (arguments.callee.done) return;
 
    // flag this function so we don't do the same thing twice
    arguments.callee.done = true;
 
    // kill the timer
    // DWD - check against window
    if ( window._timer ) clearInterval(window._timer);
 
    // DWD - fire the window onload now, and replace it
    if ( window.onload && ( window.onload !== window.mtInit ) ) {
        window.onload();
        window.onload = function() {};
    }
}
 
/* for Mozilla/Opera9 */
if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", mtInit, false);
}
 
/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
    if (this.readyState == "complete") {
        mtInit(); // call the onload handler
    }
};
/*@end @*/
 
/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
    _timer = setInterval(function() {
        if (/loaded|complete/.test(document.readyState)) {
            mtInit(); // call the onload handler
        }
    }, 10);
}
  
/* for other browsers */
window.onload = mtInit;
 
// END: fast browser onload init

これは、window.onload 前でも DOM 処理が可能になった時点で JavaScript を実行可能にしてくれるものです。
通常、JavaScript は、表示するページにサイズの大きな画像などがあると、それが全部読み込まれた後にしか動作しません。このスクリプトは画像の読み込みに関係なく、ページのDOM処理が可能になれば、JavaScriptが開始します。つまり、Ajax がページの描画に影響なく動作します。

参考サイト:

Posted by yujiro
関連記事
人気エントリー
Hatena Hot Entries
Hatena Entries
トラックバックURL


コメントする
greeting

*必須



ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字 イタリック アンダーライン ハイパーリンク 引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)

Now loading...
Introduction
Entries of this Category
Recent Entries
Recent Comments
Recent Trackbacks
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site
検索スパム防止のため、検索フォーム使用方法を変更しています(説明記事

このブログをメールで購読する by:FeedBurner

loading ...
Categories
Monthly Archives
BlogPeople
Now loading...
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
 
List Me!