JavaScript调试的小工具(jsTrace)

    技术2022-05-11  66

    前段时间写一个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()+':'+ (now00);  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)