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 相关文章推荐
一个对于js this关键字的问题
Jan 09 Javascript
JQuery 学习笔记 选择器之一
Jul 23 Javascript
jQuery Study Notes学习笔记 (二)
Aug 04 Javascript
利用JavaScript实现新闻滚动效果(实例代码)
Nov 27 Javascript
JS小功能(onmouseover实现选择月份)实例代码
Nov 28 Javascript
JS中的异常处理方法分享
Dec 22 Javascript
js调用后台、后台调用前台等方法总结
Apr 17 Javascript
js实现a标签超链接提交form表单的方法
Jun 24 Javascript
js 声明数组和向数组中添加对象变量的简单实例
Jul 28 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
Jan 02 jQuery
浅谈React前后端同构防止重复渲染
Jan 05 Javascript
使用webpack构建应用的方法步骤
Mar 04 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
PHP set_time_limit(0)长连接的实现分析
2010/03/02 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
PHP基本语法总结
2014/09/06 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
jQuery开发者都需要知道的5个小技巧
2010/01/08 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
Python基本数据类型详细介绍
2014/03/11 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
Python 私有函数的实例详解
2017/09/11 Python
python打开windows应用程序的实例
2019/06/28 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
Python 3 判断2个字典相同
2019/08/06 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
Python configparser模块应用过程解析
2020/08/14 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
2014全国两会学习心得体会1000字
2014/03/10 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
创业计划书之密室逃脱
2019/11/08 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis