javascript调试

/********************debug.js***************************************/

//  兼容FireFox的事件处理模式
function  getEvent() {
if(document.all)return window.event;
func
=getEvent.caller;
while(func!=null){
var arg0=func.arguments[0];
if(arg0){
if(typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation) return arg0;
}

func
=func.caller;
}

return null;
}


/*
为了兼容那些不使用prototype.js的程序,写的两个函数
如果事先引入过prototype.js, 下面两个Array.prototype 就不需要了
*/


if  ( ! Array.prototype.map) {
Array.prototype.map
=function(f){
for(var i=0,ret=[];i<this.length;i++) ret.push(f(this[i],i))
return ret
}

}

if  ( ! Array.prototype.inject) {
Array.prototype.inject
=function(ret,f){
for(var i=0;i<this.length;i++) ret=f(ret,this[i],i)
return ret
}

}



/*
格式化数字或者字符为每三位分逗号的格式 123456--->123,345    1234---> 1,234
参数可以是数字或者字符串,返回字符串
*/

function  formatNum(s) {
return (""+s).split("").reverse().map(function(x,i){return (i%3 || !i)?x:x+","}).reverse().join("")
}

JsDebug
= {
maxAjaxLogNum:
5,      //最多能显示多少条Ajax调试信息
maxJsLogNum:50,       //最多能显示多少条Javascript调试信息
ajaxLog:[],        
jsLog:[],
timeLog:
{},
ajax:
function(msg){
var self=JsDebug;
self.ajaxLog.unshift(msg)
if (self.ajaxLog.length>self.maxAjaxLogNum) self.ajaxLog.length=self.maxAjaxLogNum
}
,
debug:
function(msg){JsDebug.logger(msg,"debug")},
info:
function(msg){JsDebug.logger(msg,"info")},
msg:
function(msg) {JsDebug.logger(msg,"info")},
warn:
function(msg){JsDebug.logger(msg,"warn")},
error:
function(msg){JsDebug.logger(msg,"error")},
timeStart:
function(funcName){
var self=JsDebug;
if (typeof(self.timeLog[funcName])) delete self.timeLog[funcName]
self.timeLog[funcName]
=new Object()
self.timeLog[funcName].startTimeObj
=new Date()
return self.timeLog[funcName].startTimeObj
}
,
timeEnd:
function(funcName){
var self=JsDebug;
if (typeof(self.timeLog[funcName])=='undefined' 
|| typeof(self.timeLog[funcName].startTimeObj)=='undefined')  return false
self.timeLog[funcName].endTimeObj
=new Date()
self.timeLog[funcName].timeRun
=self.timeLog[funcName].endTimeObj-self.timeLog[funcName].startTimeObj
return self.timeLog[funcName].endTimeObj
}
,
logger:
function(msg,type){
var self=JsDebug;
self.jsLog.unshift([
""+type+">【"+type+"</span><span style="color:#000000;">"</span><span style="color:#000000;">+</span><span style="color:#000000;">msg</span><span style="color:#000000;">+</span><span style="color:#000000;">"</span><span style="color:#000000;">
",type])
if (self.jsLog.length>self.maxJsLogNum) self.jsLog.length=self.maxJsLogNum
}
,
output:
function(type){
var self=JsDebug
var s="$1$2$3$4"
    
var arr=[]
if (!type) type=""
switch(type){
case "time":
case "":
var obj=self.timeLog
arr.push(
"显示隐藏性能信息")
arr.push(s.replace(
"$1","模块名").replace("$2","开始时间").replace("$3","结束时间").replace("$4","时间(ms)"))
for(var key in obj){
var o=obj[key]
var d1=o.startTimeObj
var d2=o.endTimeObj
var t1=""+d1.toLocaleTimeString()+"."+d1.getMilliseconds()
var t2=""+d2.toLocaleTimeString()+"."+d2.getMilliseconds()
arr.push(s.replace(
"$1",key).replace("$2",t1).replace("$3",t2).replace("$4",formatNum(o.timeRun)))
}

arr.push(
"
")
if (type) break;
case "js":
case "":
arr.push(
"显示隐藏调试信息")
var jsDebugMsg=self.jsLog.inject([],function(ret,x){ret.push(x[0]);return ret}).join("")
if (jsDebugMsg){
    arr.push(
'调试信息(debug)')
    arr.push(
'警告信息(warn)错误信息(error)')
    arr.push(
'一般信息(info)

')
}

       arr.push(jsDebugMsg) 
    arr.push(
"
")
       
if (type) break;
case "ajax":
case "":
    arr.push(
"显示隐藏AJAX信息")
arr.push(self.ajaxLog.join(
""))
arr.push(
"
")
if (type) break;
 
default:
break;
}

return arr.join("")
}

}


// 下面几行做一个快速连接,以后调试也不要打那么多字,辛苦啊

$t1
= JsDebug.timeStart
$t2
= JsDebug.timeEnd
$ajax
= JsDebug.ajax
$debug
= JsDebug.debug
$info
= JsDebug.msg
$msg
= JsDebug.msg
$warn
= JsDebug.warn
$error
= JsDebug.error

// 绑定事件,兼容FF.  唉,又是FF,有Prototype.js的同学可以用 Event.observe(...)
function  attachDebugEvent(element,name,func) {
    
if (element.addEventListener) element.addEventListener(name, func,"false");
   
if (element.attachEvent)      element.attachEvent('on' + name, func)
}



/*
打开调试窗口,可以按F5查看最新的调试信息。
Bug: FF打开新窗口的时候,再次按F5的时候 能取到 opener,但是却取不到opener.JsDebug,
*/


function  openDebugWin() {
var html=[]
html.push(
'</span><span style="color:#000000;">'</span><span style="color:#000000;">)<br><img align="top" alt="" src="http://img.e-com-net.com/image/info8/30b3da7787b24a2b9dc5b44c8de3f160.gif" width="0" height="0">html.push(</span><span style="color:#000000;">'</span><span style="color:#000000;">调试窗口

你可能感兴趣的:(javascript,function,ajax,object,firefox,date)