在网页Javascript开发中,调试一般不集成在开发环境,而集成在宿主环境里。所以宿主环境都会有相应的脚本调试工具,但B/S结构中客户端也具有个体差异,不同浏览器很难让问题重现,所以即时调试也有一定实用价值。脚本是驻留宿主环境内存的,所以我们可以动态改变。
脚本分析如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>测试Demo</title>
<script type="text/javascript">
var $=function(id){
return document.getElementById(id);
}
</script>
</head>
<body>
<div>累加器:<span id="display">0</span></div>
<script type="text/javascript">
var timer=1000;//计时
function run(){
setTimeout(function(){
$("display").innerHTML=parseInt($("display").innerHTML)+1;
run();//递归
},timer);
return;
}
run();
//javascript:void(function(){timer=100}());
</script>
</body>
</html>
上述代码是简单模拟一个计数器,实现的是间隔每秒钟执行一次函数,而控制是全局变量timer进行,所以可以由以下脚本注入对源代码进行修改。使用方法,将代码输入地址栏回车即可。
javascript:void(function(){timer=100;}());
根据原理,我们可以有以下知识扩展,加载Firebug的JS版,代码如下:
javascript:void(function(){eval("var _script= document.createElement(\"script\"); _script.type = \"text/javascript\";_script.src = \"http://fbug.googlecode.com/svn/lite/branches/firebug1.4/content/firebug-lite-dev.js\"; document.getElementsByTagName(\"head\")[0].appendChild(_script);")}());
为页面加载JQuery脚本库:
javascript:void(function(){eval("var _script= document.createElement(\"script\"); _script.type = \"text/javascript\";_script.src = \"http://www.sise.com.cn/js/jquery-latest.js\"; document.getElementsByTagName(\"head\")[0].appendChild(_script);")}());