web前端开发也需要日志


Posted in Javascript onDecember 09, 2010

如IE6,在他上面还不那么富饶,给程序调试带来的很大的痛苦啊,所以日志即时输出是一个不错的选择,可以知道程序覆盖到了哪里。即是在先进的浏览器上也是很有必要的,他比去调试程序来确定相应的业务代码有没有执行到也快的多也容易的多,好了,下面来给大家介绍一个我业余时间写的调试信息输出工具。
上代码:

(function(){ 
var cache = []; 
var el = null; 
this.__debugLine = 1; 
function parseObjToStr(obj){ 
if(obj.constructor == String){ 
return obj.toString(); 
} 
var ret = []; 
for(var o in obj){ 
if(typeof obj[o]!="function") 
ret.push(o+":"+obj[o]); 
} 
return ret.join(","); 
} 
this.assert = function(flag,msg){ 
msg = {"number":1,"string":1,"boolean":1,"function":1,"undefined":1}[typeof msg]?msg:parseObjToStr(msg); 
//Log.getInstance().debug(msg); 
return; 
var bgColor = this.__debugLine%2==0?"background-color:#F8F8F8":"background-color:#ffffff"; 
msg = flag=="debug"?String.format('<div style="{0}"><table style="font-size:12px;border-collapse:collapse !important;"><tbody><tr><td style="height:25px;line-height:25px;border-right:3px solid #6CE26C;width:45px; text-align:center;"><code style="font-weight:bold;color:gray">{1}</code></td><td><b style="color:{2};margin-left:5px;">[{3}]:</b>{4}</td></tr></tbody></table></div>', 
bgColor,this.__debugLine,"#333333",flag,msg):msg; 
if(flag.constructor!=String) 
msg = String.format('<div style="{0}"><table style="font-size:12px;;border-collapse:collapse !important;line-height:25px;"><tbody><tr><td style="height:25px;line-height:25px;border-right:3px solid #6CE26C;width:45px;text-align:center;"><code style="font-weight:bold;color:gray">{1}</code></td><td><b style="color:{2};margin-left:5px;">[{3}]:</b>{4}</td></tr></tbody></table></div>', 
bgColor,this.__debugLine,flag?"green":"red",flag?"PASS ":"FAIL ",msg); 
this.__debugLine++; 
if(cache!=null){ 
cache[cache.length] = msg; 
} 
else{ 
el.innerHTML += msg; 
} 
} 
function applyStyle(el,style){ 
for(var pro in style){ 
el.style[pro] = style[pro]; 
} 
} 
addEvent(window,"load",function(){ 
return; 
el = document.createElement("div"); 
var elStyle ={backgroundColor:"#ffffff",color:"#333333",border:"1px solid #dcdada",borderLeft:"0px solid #6CE26C",borderRight:"0px solid #6CE26C" 
,lineHeight :"25px",textAlign:"left",listStyleType :"none",margin:"0px",maxHeight:"200px",overflow:"auto"}; 
var head = document.createElement("div"); 
var headStyle ={backgroundColor:"#fef5c5",lineHeight:"25px"}; 
head.innerHTML = "<span style='float:left;font-weight:bold;margin-left:10px;font-size:13px;'>调试信息控制台</span><span id='console_andler' style='float:right;margin-right:20px;cursor:pointer' title='展开/折叠'>+</span><br style='clear:both'>"; 
var wrap = document.createElement("div"); 
var wrapStyle ={overflow:"hidden",backgroundColor:"#ffffff",color:"#333333",border:"1px solid #C0C0C0","fontSize":"12px","margin":"5px",position:"fixed",left:"0px",bottom:"0px",width:"97%"}; 
var foot = document.createElement("div"); 
var footStyle ={padding:"0",textAlign:"left"}; 
foot.innerHTML = ">>><input type = 'text' value='' id='console_eval' style='margin:0;width:90%;border:none;line-height:25px;height:25px;text-indent:10px;'/>"; 
applyStyle(wrap,wrapStyle); 
applyStyle(head,headStyle); 
applyStyle(el,elStyle); 
applyStyle(foot,footStyle); 
wrap.appendChild(head); 
wrap.appendChild(el); 
wrap.appendChild(foot); 
document.body.appendChild(wrap); 
el.innerHTML = cache.join(""); 
cache = null; 
function toggle(){ 
if(!this.hide){ 
el.style.display = "none"; 
foot.style.display = "none"; 
wrap.style.width = "200px"; 
this.hide = true; 
} 
else{ 
el.style.display = ""; 
foot.style.display = ""; 
wrap.style.width = "98%"; 
this.hide = false; 
} 
} 
head.onclick = function(){ 
toggle.call(this); 
} 
head.onclick(); 
document.getElementById("console_eval").onkeydown = function(e){ 
e = e||window.event; 
if(e.keyCode==13){ 
try{ 
eval.call(window,String.format("assert('debug',{0})",this.value)); 
} 
catch(e){ 
assert("debug",e.message); 
} 
el.scrollTop = el.scrollHeight; 
} 
} 
}); 
})();

上面代码调用也相当的简单
assert("debug","调试信息");

页面中就会出相应的日志。
该日志输出部分代码取自Jquery作者一个单元测试模块。
Javascript 相关文章推荐
JavaScript中的方法调用详细介绍
Dec 30 Javascript
在javascript中使用com组件的简单实现方法
Aug 17 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
Jan 04 Javascript
详解Angualr 组件间通信
Jan 21 Javascript
jquery 校验中国身份证号码实例详解
Apr 11 jQuery
angular.js指令中transclude选项及ng-transclude指令详解
May 24 Javascript
深入理解基于vue-cli的vuex配置
Jul 24 Javascript
vue之浏览器存储方法封装实例
Mar 15 Javascript
js字符串类型String常用操作实例总结
Jul 05 Javascript
JS获取表格视图所选行号的ids过程解析
Feb 21 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
Nov 11 Javascript
QT与javascript交互数据的实现
May 26 Javascript
JS拖动技术 关于setCapture使用
Dec 09 #Javascript
一起来写段JS drag拖动代码
Dec 09 #Javascript
教您去掉ie网页加载进度条的方法
Dec 09 #Javascript
javascript 折半查找字符在数组中的位置(有序列表)
Dec 09 #Javascript
基于jQuery的一个扩展form序列化到json对象
Dec 09 #Javascript
来自国外的页面JavaScript文件优化
Dec 08 #Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
Dec 08 #Javascript
You might like
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
详解json在php中的应用
2018/09/30 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
jQuery插件开发全解析
2012/10/10 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
浏览器页面区域大小的js获取方法
2013/09/21 Javascript
js捕获鼠标滚轮事件代码
2013/12/16 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
Active控件问题小结(附解决办法)
2016/06/09 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
vue使用laydate时间插件的方法
2018/11/14 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
Python 转义字符详细介绍
2017/03/21 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
python爬虫中多线程的使用详解
2019/09/23 Python
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
2014年教师节国旗下讲话稿
2014/09/10 职场文书
2014年团支部工作总结
2014/11/17 职场文书
委托培训协议书
2014/11/17 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
2016年会开场白台词
2015/06/01 职场文书
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB
详解Python为什么不用设计模式
2021/06/24 Python
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记