JavaScript调试的小工具(jsTrace)

前段时间写一个JavaScript的程序,根据用户鼠标的操作进行控件的拖放。感觉用 alter 或 断点跟踪调试的方法太难受了。就仿照MFC的TRACE功能写了如下的小代码(trace.js)。

拥有的功能如下:
  trace(str) : 在调试窗口输出信息;
  traceObj(obj): 在调试窗口输出对象所有不为空的属性;
  tracefmt(...): 按照用户定义的格式进行输出
  traceHTML():  输出当前函数所在页面的HTML页面
调试窗口: 
  支持调试信息拷贝到剪贴板和清空调试信息

  使用例子如下:
<input type ="button" onclick = "tracefmt('%s add %s = %s', val1.value, val2.value, result.value)" value = "TestTrace">

 请将后面的代码分别保存成 trace.js 和 trace.html, sample.html
//--------------------------trace.js-------------------------------
 var tracewin = null;
 var tracenum=1;
 function trace(str){
   if(tracewin==null || tracewin.closed)
     {
      tracewin = window.open('trace.html','tracewindow',
        'height=400;width=100;top=600;left=800;resizable=yes');
     }
   if(tracewin){
        tracewin.traceStr(tracenum+":"+str);
       tracenum++;
   }
}

function traceObj(obj){
  //return;
    var strObj='obj:'+obj+'/n/r';
    for(prop in obj)
    {
        if(obj[prop])
            strObj += ('/t'+prop +'='+obj[prop]+';/n/r');
    }  
    trace(strObj);
    return strObj;
}

function format()
{
  var i, msg = "", argNum = 0, startPos;
  var args = format.arguments;
  var numArgs = args.length;
  if(numArgs)
  {
    theStr = args[argNum++];
    startPos = 0;  endPos = theStr.indexOf("%s",startPos);
    if(endPos == -1) endPos = theStr.length;
    while(startPos < theStr.length)
    {
      msg += theStr.substring(startPos,endPos);
      if (argNum < numArgs) msg += args[argNum++];
      startPos = endPos+2;  endPos = theStr.indexOf("%s",startPos);
      if (endPos == -1) endPos = theStr.length;
    }
    if (!msg) msg = args[0];
  }
  return msg;
}

function tracefmt()
{
  var i, msg = "", argNum = 0, startPos;
  var args = tracefmt.arguments;
  var numArgs = args.length;
  if(numArgs)
  {
    theStr = args[argNum++];
    startPos = 0;  endPos = theStr.indexOf("%s",startPos);
    if(endPos == -1) endPos = theStr.length;
    while(startPos < theStr.length)
    {
      msg += theStr.substring(startPos,endPos);
      if (argNum < numArgs) msg += args[argNum++];
      startPos = endPos+2;  endPos = theStr.indexOf("%s",startPos);
      if (endPos == -1) endPos = theStr.length;
    }
    if (!msg) msg = args[0];
  }
  trace(msg);
}

function traceHTML(){
  var parObj = document.body;
  while(parObj && parObj.tagName != 'HTML'){
    parObj = parObj.parentElement;
  }
    trace(parObj.outerHTML);
}

function getTime(){
  var now= new Date();
  var strTime= now.toLocaleTimeString()+':'+ (now%1000);
  return strTime;
}
function traceTime(info){
  var strInfo = getTime()+':'+ info;
  trace(strInfo);
}


//--------------------------trace.html-------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script language="JavaScript">
    function traceStr(str){
    var oOption = document.createElement("OPTION");
    form1.traceList.options.add(oOption);
    oOption.innerText = str;
    oOption.selected=true;
    //form1.btnClose.focus();
    }
    function traceInfoClick(){
      var nIndex=form1.traceList.selectedIndex;
      if(nIndex!=-1)
      {
        form1.txtComments.value=form1.traceList.options[nIndex].innerText;
        form1.btnCopy.disabled=false;
      }
      else
      {
        form1.txtComments.value='';
        form1.btnCopy.disabled=true;
      }
    }
    function CopyData()
    {
      var nIndex=form1.traceList.selectedIndex;
      if(nIndex!=-1)
      { 
        strSelect = form1.traceList.options[nIndex].innerText;
        window.clipboardData.setData('text',strSelect.substr(strSelect.indexOf(':')+1));
       }
    }
    function ClearData()
    {
        form1.traceList.innerHTML="";
    }
  </script>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>JavaScript Tracer;</title>
</head>
<body>
<form name="form1">
  <center>
    <select name="traceList" style="width:80%;height:40%" size="2"
      οnclick="traceInfoClick()">
    </select><br/>
    <TEXTAREA style="width:80%;overflow:scroll" name="txtComments" rows="10">
    </TEXTAREA>
  </center>
  <p align="right">
      <input type="button" value="Clear" name="btnClear"
      οnclick="ClearData()"/>
    <input type="button" value="Copy" name="btnCopy"
      οnclick="CopyData()" disabled="disabled"/>
    <input type="button" value="Close" name="btnClose"
      οnclick="window.close()" align="right" />
  </p>
  </form>
</body>
</html>

//--------------------------Sample.html-----------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> TestJavScriptTrace </title>
<script language="JavaScript" src="trace.js"></script>
</head>

<body>
<input type ="text"name ="val1" size="30" value = "11111"><br/>
<input type ="text"name ="val2" size="30" value = "22222"><br/>
<input type ="text" name ="result" size="30" value = "33333"><br/>
<input type ="button" onclick = "tracefmt('%s add %s = %s', val1.value, val2.value, result.value)" value = "TestTrace">
</body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值