为调试JavaScript添加输出窗口的代码


Posted in Javascript onFebruary 07, 2010

虽然不是很复杂的实现,但每次都要这样就会很麻烦,所以我写了一小段脚本,用来自动生成这个输出窗口。
代码

window.Babu = {}; 
Babu.Debugging = {}; 
Babu.Debugging.writeLine = function(format, arg1, arg2) { 
var console = Babu.Debugging._getConsole(); 
if (console.get_visible()) { 
var msg = format; 
if (typeof msg !== "undefined" && msg !== null) { 
var index; 
if (typeof msg === "string") { 
var array = format.match(/\{(\d+)\}/g); 
if (array) { 
for (var i = 0; i < array.length; i++) { 
index = array[i]; 
index = parseInt(index.substr(1, index.length - 2)) + 1; 
msg = msg.replace(array[i], arguments[index]); 
} 
} 
} 
} 
var span = document.createElement("SPAN"); 
span.appendChild(document.createTextNode(msg)); 
console._output.appendChild(span); 
console._output.appendChild(document.createElement("BR")); 
span.scrollIntoView(); 
return span; 
} 
} 
Babu.Debugging._getConsole = function() { 
var console = Babu.Debugging._console; 
if (!console) { 
var div = document.createElement("DIV"); 
div.style.position = "fixed"; 
div.style.right = "3px"; 
div.style.bottom = "3px"; 
div.style.width = "350px"; 
div.style.height = "180px"; 
div.style.backgroundColor = "white"; 
div.style.color = "black"; 
div.style.border = "solid 2px #afafaf"; 
div.style.fontSize = "12px"; 
document.body.appendChild(div); 
Babu.Debugging._console = console = div; 
div = document.createElement("DIV"); 
div.style.backgroundColor = "#e0e0e0"; 
div.style.position = "absolute"; 
div.style.left = "0px"; 
div.style.right = "0px"; 
div.style.top = "0px"; 
div.style.height = "16px"; 
div.style.padding = "2px 2px"; 
div.style.margin = "0px"; 
console.appendChild(div); 
console._toolbar = div; 
div = document.createElement("DIV"); 
div.style.overflow = "auto"; 
div.style.whiteSpace = "nowrap"; 
div.style.position = "absolute"; 
div.style.left = "0px"; 
div.style.right = "0px"; 
div.style.top = "20px"; 
div.style.bottom = "0px"; 
div.style.height = "auto"; 
console.appendChild(div); 
console._output = div; 
var btn; 
btn = document.createElement("SPAN"); 
btn.innerHTML = "收缩"; 
btn.style.margin = "0px 3px"; 
btn.style.cursor = "pointer"; 
console._toolbar.appendChild(btn); 
btn.onclick = function() { if (console.get_collapsed()) console.expand(); else console.collapse(); } 
btn = document.createElement("SPAN"); 
btn.innerHTML = "清除"; 
btn.style.margin = "0px 3px"; 
btn.style.cursor = "pointer"; 
console._toolbar.appendChild(btn); 
btn.onclick = Babu.Debugging.clearConsole; 
btn = document.createElement("SPAN"); 
btn.innerHTML = "关闭"; 
btn.style.cursor = "pointer"; 
btn.style.margin = "0px 3px"; 
console._toolbar.appendChild(btn); 
btn.onclick = function() { Babu.Debugging.hideConsole(); } 
console.get_visible = function() { return this.style.display !== "none" }; 
console.get_collapsed = function() { return !(!this._collapseState) }; 
console.collapse = function() { 
if (!this.get_collapsed()) { 
this._output.style.display = "none"; 
this._toolbar.childNodes[1].style.display = "none"; 
this._toolbar.childNodes[2].style.display = "none"; 
this._toolbar.childNodes[0].innerHTML = "展开"; 
this._collapseState = { width: this.style.width, height: this.style.height } 
this.style.width = "30px"; 
this.style.height = "16px"; 
} 
} 
console.expand = function() { 
if (this.get_collapsed()) { 
this._output.style.display = ""; 
this._toolbar.childNodes[1].style.display = ""; 
this._toolbar.childNodes[2].style.display = ""; 
this._toolbar.childNodes[0].innerHTML = "收缩"; 
this.style.width = this._collapseState.width; 
this.style.height = this._collapseState.height; 
this._collapseState = null; 
} 
} 
} 
return console; 
} 
Babu.Debugging.showConsole = function() { 
Babu.Debugging._getConsole().style.display = ""; 
} 
Babu.Debugging.hideConsole = function() { 
var console = Babu.Debugging._console; 
if (console) { 
console.style.display = "none"; 
} 
} 
Babu.Debugging.clearConsole = function() { 
var console = Babu.Debugging._console; 
if (console) console._output.innerHTML = ""; 
}

调用方法很简单:
Babu.Debugging.writeLine("调试信息"); 
Babu.Debugging.writeLine("带参数的调试信息:参数1={0},参数2={1}", arg1, arg2);

调用之后,会自动在窗口的右下角出现一个固定位置的窗口,并显示相应的内容。效果图请看下面:
为调试JavaScript添加输出窗口的代码
Javascript 相关文章推荐
js window.event对象详尽解析
Feb 17 Javascript
JavaScript学习笔记(十七)js 优化
Feb 04 Javascript
url 编码 js url传参中文乱码解决方案
Apr 11 Javascript
javascript中onclick(this)用法介绍
Apr 19 Javascript
jQuery判断元素是否存在的可靠方法
May 06 Javascript
JS表的模拟方法
Feb 05 Javascript
jQuery自动或手动图片切换效果
Oct 11 jQuery
javaScript强制保留两位小数的输入数校验和小数保留问题
May 09 Javascript
jQuery 实现倒计时天,时,分,秒功能
Jul 31 jQuery
JavaScript函数式编程(Functional Programming)纯函数用法分析
May 22 Javascript
ES6 Class中实现私有属性的一些方法总结
Jul 08 Javascript
vue瀑布流组件实现上拉加载更多
Mar 10 Javascript
JavaScript 读取元素的CSS信息的代码
Feb 07 #Javascript
js png图片(有含有透明)在IE6中为什么不透明了
Feb 07 #Javascript
JavaScript Event学习第八章 事件的顺序
Feb 07 #Javascript
JavaScript Event学习第七章 事件属性
Feb 07 #Javascript
JavaScript Event学习第六章 事件的访问
Feb 07 #Javascript
JavaScript Event学习第五章 高级事件注册模型
Feb 07 #Javascript
JavaScript Event学习第四章 传统的事件注册模型
Feb 07 #Javascript
You might like
第九节 绑定 [9]
2006/10/09 PHP
使用PHP数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
php实现mysql数据库备份类
2008/03/20 PHP
yii框架中的Url生产问题小结
2012/01/16 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
php-redis中的sort排序函数总结
2015/07/08 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
详解Bootstrap插件
2016/04/25 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
jQuery中animate的几种用法与注意事项
2016/12/12 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
python3编写C/S网络程序实例教程
2014/08/25 Python
python查询mysql中文乱码问题
2014/11/09 Python
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
Python使用pickle模块存储数据报错解决示例代码
2018/01/26 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Python小程序 控制鼠标循环点击代码实例
2019/10/08 Python
如何用Python进行时间序列分解和预测
2021/03/01 Python
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
技术总监的工作职责
2013/11/13 职场文书
司机岗位职责
2013/11/15 职场文书
关于感恩的演讲稿800字
2014/08/26 职场文书
2015年国庆节慰问信
2015/03/23 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL