为调试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 相关文章推荐
音乐播放用的的几个函数
Sep 07 Javascript
Javascript 类、命名空间、代码组织代码
Jul 31 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
Mar 14 Javascript
JavaScript起点(严格模式深度了解)
Jan 28 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
Nov 25 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
Mar 21 Javascript
微信小程序实现录音时的麦克风动画效果实例
May 18 Javascript
使用vue中的混入mixin优化表单验证插件问题
Jul 02 Javascript
13 个npm 快速开发技巧(推荐)
Jul 04 Javascript
javaScript实现一个队列的方法
Jul 14 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
Dec 10 Javascript
Vue中inheritAttrs的使用实例详解
Dec 31 Vue.js
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
PHP一些常用的正则表达式字符的一些转换
2008/07/29 PHP
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
2013/11/05 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
JavaScript常见鼠标事件与用法分析
2019/01/03 Javascript
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
在vue中使用回调函数,this调用无效的解决
2020/08/11 Javascript
Python中的下划线详解
2015/06/24 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
python 爬取古诗文存入mysql数据库的方法
2020/01/08 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
美国美妆网站:B-Glowing
2016/10/12 全球购物
干部现实表现材料
2014/02/13 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
保送生自荐信范文
2015/03/26 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书
长征观后感
2015/06/09 职场文书
小学生红领巾广播稿
2015/08/19 职场文书