JavaScript デバッグ用ライブラリ

結果がまとめて一気に見れて、かつ無限ループも察知して
ほどほどで切り上げてくれる alert() みたいなものです。

名称が邪魔しない用にオブジェクト化してます。
debugW.check()、debug.check() で alert() と同じように使って下さい。

debug は擬似ウインドウタイプで、ページ読み込み後に初めてウインドウを表示します。
擬似ウインドウは左上に position = absolute で出て、クリックすれば消えます。

debugW は別ウインドウタイプで、逐次追加出力していきますが、ブラウザの設定によってはポップアップブロックされます。

両方とも最後に使用例を載せておきました。(2008/11)

<script type="text/javascript">
<!--
/************↓debug↓************/
//↓IEの条件付コンパイルを有効にします
//@cc_on

window./*@if (@_jscript) attachEvent ('on' + @else@*/
 addEventListener (/*@end@*/ 'load', function(){
    //↓document.onload で debug.b に body 要素を代入
    // (スクリプト位置によっては初期化時に取得できないため)
    debug.b = document.getElementsByTagName("body")[0];
    
    debug.e.setAttribute( "id", "debugCheckView");
    with(debug.e.style){
        zIndex = "99";
        color = "yellow";
        backgroundColor = "black";
        borderColor = "navy";
        borderStyle = "double";
        borderWidth = "3";
        //↓既存ページの表示に影響を与えないよう absolute で設定
        position = "absolute";
        left = "5px";
        top = "5px";
    }
    
    //↓body 直下の末尾に擬似ウインドウを挿入
    debug.b.appendChild( debug.e );
    
    //↓クリックで擬似ウインドウが消えるようにセットします
    debug.setClickRemove( debug.e );
    
}, false );
///////////////

//↓名前空間 "debug" で規定
var debug = {

    //出力用擬似ウインドウ
    e : document.createElement("div"),

    //body要素を保持
    b : document.getElementsByTagName("body")[0],

    //無限ループの検出に使用
    counter : 0,

    //無限ループ検知の基準出力数
    maxOutput : 300,

    //引数の値を擬似ウインドウで表示する check() を規定
    check :
        function( targetVar ){
            //↓初回以外は改行して追記
            if(debug.counter>0)debug.e.appendChild( document.createElement("br") );
            //↓引数をテキストノードにして擬似ウインドウに追記
            var str = targetVar;
            str = document.createTextNode( str );
            debug.e.appendChild( str );
            
            //↓無限ループは中断させる
            debug.counter++;
            if(debug.counter>debug.maxOutput){
                alert(debug.maxOutput + " 以上の出力を検出したため debug.check を中止します。\n※以後の debug.check はエラーとなります。");
                debug = null;
            }
        },
    
    //targetを消すclickイベントを追加するクロスブラウザメソッド
    setClickRemove :
            function( target ){
            target./*@if (@_jscript) attachEvent ('on' + @else@*/
             addEventListener (/*@end@*/ 'click', function(){
                target.parentNode.removeChild(target);
                //↓メモリリーク防止
                debug = null;
            }, false );
        }
}
/************↑debug↑************/
//-->
</script>


<script type="text/javascript">
<!--
    //↓debug.check の使用例

    var aa = "あいうえお";
    debug.check("aa= " + aa);
    
    var bb = 123456789;
    debug.check("bb= " + bb);
//-->
</script>

<script type="text/javascript">
<!--
/************↓debugW↓************/
//↓名前空間 "debugW" で規定
var debugW = {
    counter : 0,
    w : null,
    maxOutput : 300,
    check :
        function(targetVar){
            if(debugW.counter==0){
                debugW.w = window.open("","debug_win","");
                if(!debugW.w){
                    alert("ポップアップがブロックされています。");
                    debugW = null;
                }
                with(debugW.w.document){
                    open();
                    write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">');
                    write('<html lang="ja"><head><title>debug<\/title><\/head><body>');
                    write('<form name="outputForm" id="outputForm">');
                    write('<textarea name="outputArea" id="outputArea" rows="20" cols="80" style="background-color:black;color:yellow;">');
                    write(targetVar);
                    write('<\/textarea><\/form><\/body><\/html>');
                    close();
                }
                debugW.counter++;
            }else if(debugW.counter<debugW.maxOutput){
                debugW.w.document.forms["outputForm"].elements["outputArea"].value += "\n" + targetVar;
                debugW.counter++;
            }else{
                alert(debugW.maxOutput + " 以上の出力を検出したため debugW.check を中止します。\n※以後の debugW.check はエラーとなります。");
                debugW = null;
            }
        }
}
/************↑debugW↑************/
//-->
</script>

<script type="text/javascript">
<!--
    //↓debugW.check の使用例

    var aa = "あいうえお";
    debugW.check("aa= " + aa);
    
    var bb = "かきくけこ";
    debugW.check("bb= " + bb);
    
    var cc = 123456789;
    debugW.check("cc= " + cc);
//-->
</script>


ご意見・ご指摘等ございましたらお願い致します。(雑記帳へ
ホームページへ戻る