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的事件描述
Sep 08 Javascript
ExtJS 2.2.1的grid控件在ie6中的显示问题
May 04 Javascript
javascript中创建对象的三种常用方法
Dec 30 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
Dec 23 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
Feb 11 Javascript
使用jquery.validate自定义方法实现&quot;手机号码或者固话至少填写一个&quot;的逻辑验证
Sep 01 Javascript
用vue构建多页面应用的示例代码
Sep 20 Javascript
React Native 混合开发多入口加载方式详解
Sep 23 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
Mar 07 Javascript
javascript canvas时钟模拟器
Jul 13 Javascript
javascript实现用户必须勾选协议实例讲解
Mar 24 Javascript
vue @click.native 绑定原生点击事件
Apr 22 Vue.js
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
Smarty+QUICKFORM小小演示
2007/02/25 PHP
三个类概括PHP的五种设计模式
2012/09/05 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
jquery垂直公告滚动实现代码
2013/12/08 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
浅谈 Vue 项目优化的方法
2017/12/16 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
gulp构建小程序的方法步骤
2019/05/31 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
python将unicode转为str的方法
2017/06/21 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
Python input函数使用实例解析
2019/11/22 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
2020/06/01 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
介绍Ibatis的核心类
2013/11/18 面试题
财务主管自我鉴定
2014/01/17 职场文书
施工材料员岗位职责
2014/02/12 职场文书
赔偿协议书范本
2014/04/15 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
生产车间管理制度
2015/08/04 职场文书