在Web网页上使用VBScript 和JScript[3]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 ghj1976 的 blog

当你把几种语言混合使用时,<script>块在网页中出现的顺序非常重要,有时候会影响到它们是否能正常工作。看看下面这个简单的例子,它是在一个内联的vbscript脚本中调用一个用jscript编写的函数:

<script language="vbscript">
' calls a jscript function
anumber = 2
doublednumber = doubleme(anumber)
document.write("the answer is " & doublednumber)
</script>

<script language="javascript">
function doubleme(anumber){
return anumber * 2;
}
</script>

它不会起任何作用。说得更明白一点就是,文档写入说明会往网页中写入一个空的字符串。为什么?很简单,在处理vbscript块时,下面的jscript <script>块没有被读出来,没有进行语法分析,因此网页不能使用它。而当浏览器处理网页中的脚本块时,它是从上往下进行的。

在这个例子中,只需要调换一下脚本块的顺序就能够解决这个问题了。事实上,这类问题并不那么常见,在大多数情况下,<script>中包含的函数和子程序只有当整个网页被全部下载下来并且所有的单元都可以使用之后才能够被调用。不过,你还是要记住,网页是按照一定的顺序来处理的,不同语言的<script>块是分别处理的。

区分大小写以及命名习惯

jscript能够区别大写和小写:在每个jscript的关键字,还有jscript姓名空间的所有部分中,你可以把大写和小写字母恰当的结合起来使用。这其中包括了你使用的对象模型中所有的关键字。例如,当你使用asp response对象时,必须正确地使用大写或小写字母(如response.write),否则jscript 会坚决不予承认。同样的,如果你为dhtml onclick事件编写一个处理程序时,如果用在visual basic中经常使用的形式jscript可能就不会承认。

vbscript当然是不区分大写和小写字母的。在某种程度上,这种不计较大小写的忽视甚至在你用vbscript对jscript编写的单元进行访问时都适用。下面几个小例子中给出了两个脚本。第一个是用jscript编写的,其中还包括了一个全局变量(ctr)和一个小小的函数(doubleme)。第二个脚本是用vbscript编写的,它是一个按钮处理程序,它能够调用jscript函数,并且报告全局变量的值。

<script language=javascript>var ctr;function doubleme(anumber){ // initialize value of global counter if(parseint(ctr)){
ctr = ctr + 1;}
else{
ctr = 1;
}
return anumber * 2;
}
</script>

<script language="vbscript">
function btn1_onclick()
numbertodouble = 12
alert("the doubled number = " & doubleme(numbertodouble))
alert("you have doubled the number " & ctr & " times.")
end function
</script>

在vbscript脚本中,很明显,我在提到doubleme 函数和ctr变量时,没有正确使用字母的大小写,但是程序依然运行良好。

这是一个好消息。而坏消息就是,在下面这些情况下你一定要注意字母的大小写:

如果网页中的jscript脚本所包含的单元只能够通过字母的大写和小写来区分,例如,一个叫做timer()的函数和一个叫做timer的全局变量等等。记住,尽管这种编码方式不怎么好,但是有时候在你的网页中还是可能会遇到原来就存在的编码。

如果你在一个函数调用中把jscript单元的名字作为一个字符串参数来使用

如果jscript包括的单元仅仅能够用字母的大小写来区分,那么vbscript就会让你把它们看成一样的(也就是说,不区分大写和小写)。vbscript只能看看不管大小写的区别,它们是不是一样,因此它识别出的只有一个jscript单元。换一句话说,如果vbscript首先找到的是叫做timer()的函数,那么它就无法找到叫做timer的全局变量了,反之也是一样。即便你在vbscript编码中十分注意的把它们做了区别结果也是一样。因为vbscript在处理这些名字的时候认为它们只有一种写法。不幸的是,这里没有其它的解决方法,除非在jscript的代码中不利用这些大小写之间的微小差别来区分不同的函数名称。

除了在某些特殊的情况下,把单元名作为参数使用这种问题并不常见。特殊情况之一是在visual interdev 6.0中的脚本对象模型中。下面我会把它作为一个例子来使用,你可以把它看作是相同情况下的处理准则。

visual interdev 6.0的脚本对象模型都是用jscript来编写的。你也可以用vbscript来编写自己的编码,它能够与用vbscript区分大小写方式编写的脚本对象模型一起使用。有时候,你不能够直接调用某一方法,除非你把这个方法的名称传递到一个jscript函数中,而由函数来为你调用这个方法。

一个典型的例子就是警告方法,你可以用它把一个方法绑定到一个特殊的事件上。在下面这个例子中,一个按钮的onmouseover事件被绑定到changecaption()事件处理程序上。

<script language="vbscript">function setadvisemethods()
btn1.advise("onmouseover", "changecaption()")
end function
</script>

因为你把这些名字作为字符串传送到一个jscript函数中,所以你能够得到正确的大小写表示。稍后,jscript会自动用它的区分大小写的规则来重新评估这些名字,如果大小写不正确,它会找不到它们。

从vbscript 往jscript中传送数组

有时候一个vbscript程序会传送一个数组作为它的一个参数,或者作为它的返回值。你可以从jscript中调用这个程序,不过必须把vbscript 数组转换成为一个可用的jscript 数组。你只要在jscript 函数中建立一个vbarray 对象并且用toarray把它转换成为一个jscript数组就可以了。

注意:jscript不支持多维数组,如果原来的vbscript数组是多维的,经过toarray的转换后它会成为一个一维的jscript数组。

在下面的例子中有一个vbscript 脚本,它建立了一个数组,还有一个jscript脚本,它将说明如何才能获得并使用这个数组:

<script language="vbscript">
function makearrayvb()
' creates a vbscript array
dim anarray(1,1)
anarray(0,0) = "0,0"
anarray(0,1) = "0,1"
anarray(1,0) = "1,0"
anarray(1,1) = "1,1"
makearrayvb = anarray
end function

<script language="javascript">
// accesses a vbscript array within a jscript script
function getvbarray(){
var arrayobj;
var jsarray;
arrayobj = makearrayvb();
jsarray = vbarray(arrayobj).toarray();
alert("vbscript array length = " + jsarray.length);
// displays the contents of the array
for(i=1;i<=jsarray.length;i++){
alert(jsarray[i-1]);
}
}
</script>

不过,在目前的vbscript(4.0)中,反过来是无法做到的。也就是说你不能把一个jscript 数组转换成为vbscript数组。如果你遇到的是一个jscript程序,要转换数组,你可以选择一下几种做法:

  • 用jscript编写调用程序
  • 用vbscript 重新编写jscript程序
  • 如果可能,把jscript 数组转换成一种不同的结构,如转换成一个限制的字符串等,这样vbscript 就能够使用了。例如,你可以用tostring 函数把一个数组转换成一个用逗号分隔的,无限制的字符串。这样,在vbscript中你就能够用split函数把它分成不同的单元。很明显这种方法在很多时候并不管用,不过有时又的确有效。

更新脚本语言

vbscript和 jscript都不是一成不变的语言。两种语言的引擎都定时进行更新,增加一些新的特性,解决已经发现的问题。因为两种语言实际上都是作为activex组件来应用的,所以每当你更新任何控制器时,你就可以同时更新它们。当你安装了新的语言引擎之后,任何需要调用引擎的应用程序会在它们运行某些脚本时调用这个新引擎--这些引擎包括internet explorer 或visual interdev等。

如果要了解语言引擎的情况以及如何更新的方法,还有脚本的一般知识,请访问microsoft scripting web站点,网址是:
http://msdn.microsoft.com/scripting/。同时,祝你编写脚本时一切顺利!

如果有问题,请发e-mail给我们。

本文关键:在Web网页上使用VBScript 和JScript
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top