调试和脚本库
因为脚本对象本身是用脚本编写的,调试你编写的和脚本对象模型相互作用的脚本可能就很复杂,这有以下几个原因:
首先,当你利用调试器单步执行你自己的脚本时,你可能会进入不熟悉的并且非常复杂的脚本库代码中。其次,如果在脚本库内部发生了一个错误,单步执行它可能会是冗长乏味的,并且还不一定能帮你查明错误。最后,有时追随事件次序及脚本和脚本对象模型之间的控制流可能是很困难的。
现在,你可以利用下面这些脚本对象模型调试选项在这些环境下调试你的应用程序:
捕捉低层错误(Catch low-level errors)--如果一个脚本对象如Recordset,遇到一个错误,它可能会利用详细的错误消息来警告你。这个选项帮你利用可能会由于外部原因而失败的组件来找到错误。
跟踪事件(Trace events)--你可能会让页面显示一个当它们发生时触发的事件列表。这个选项帮助你查看和脚本对象模型事件相关的脚本将在什么时候执行。
跟踪警告(Trace warnings)--你可能会看到描述可能发生的错误的警告消息,但有些错误是没有警告消息,它们通常是悄悄地发生。这个选项帮你发现像那些由于向方法传递无效参数而产生的错误。
使脚本对象能够进行调试
当你利用Visual Studio 6.0, Service Pack 3及更高版本创建一个新的ASP页时,ASP页在顶部包含一个脚本块,在这个脚本块中有调试选项。
注意 对于那些在安装Service Pack 3及更高版本之前创建的项目,你必须把新的脚本库文件拷贝到你的项目中。
缺省情况下,选项是关闭的。脚本块一般如下:
<SCRIPT id=DebugDirectives runat=server language=javascript>
// Set these to true to enable debugging or tracing
@set @debug=false
@set @trace=false
</SCRIPT>
注意:脚本对象调试要求服务器上正在运行Microsoft JScript 5.0或更高版本。你可以从Microsoft Visual InterDev 6.0 CD将JScript 5.0安装到服务器上,也可以从微软脚本网站上得到,站点位于http://msdn.microsoft.com/scripting/default.htm。
为了能够进行调试,就要对你想要变成true的选项进行设置。例如,要捕捉低层错误,脚本块更改如下:
<SCRIPT id=DebugDirectives runat=server language=javascript>
// Set these to true to enable debugging or tracing
@set @debug = true
@set @trace = false
</SCRIPT>
注意:调试选项块必须在ASP页的顶部紧接着@language指令出现。
你一共可以设置四个选项,如下表所示。有关单独(individual)设置的详细资料在这个主题的后面部分介绍。
选项 说明
@debug 在特定的脚本对象中报告选定的错误。
@trace 打开下面两个跟踪选项。
@trace_events 打开事件跟踪。
@trace_warnings 打开通常悄悄发生的可能错误的警告信息。
注意:如果你将@trace设置为true,它将覆盖@trace_events 和 @trace_warnings的设置。但是,如果@trace是false,你可以单独开关每个跟踪选项。 单独跟踪选项不是ASP页中缺省脚本块的一部分,因此如果你想单独设置必须另外加入它们。例如,如下代码只使事件跟踪有效而关闭警告:
<SCRIPT id=DebugDirectives runat=server language=javascript>
@set @debug = false
@set @trace = false
@set @trace_events = true
</SCRIPT>
如果你使用的是Microsoft Internet Explorer 4.x,设置任何@trace选项都将会覆盖BODY标记,这会使BODY标记中的事件绑定(binding)无效,属性被忽略。如果你用的是Internet Explorer 5.0就不会发生这个问题。
如下类型的事件联结在Internet Explorer 4.0中不会工作:
<BODY onload="initialize()">
为了解决这个局限,就要采用一个不同的绑定机制。如果你用的是Visual Basic, Scripting Edition (VBScript),你可以使用隐式(implicit)绑定
<SCRIPT LANGUAGE="VBScript">
Function window_onload()
initialize()
End Function
</SCRIPT>
如果你用的是JavaScript,你可以调用一个全局脚本,这个脚本将一个函数指针分配给一个窗口对象事件,代码如下:
<SCRIPT LANGUAGE="JavaScript">
window.onload = initialize
</SCRIPT>
如果当前的BODY标记包含属性,你应该在脚本中通过设置文档对象的属性来代替。例如,如果BODY标记目前包含属性BGCOLOR="#FFFF00",你可以利用如下的脚本来设置它。当文档首次装载时利用上面列出的技术去调用这个脚本。
<SCRIPT LANGUAGE="JavaScript">
function initialize(){
document.bgColor = "#FFFF00";
}
</SCRIPT>
……