实现vbscript和javascript互相调用方法

javascript|vbscript

   ASP具备管理不同语言脚本程序的能力,能够自动调用合适的脚本引擎以解释脚本代码和执行内置函数。ASP开发环境提供了两种脚本引擎,即VBScript(缺省)和JScript。不过,开发者并没有被限制于只能使用这两种语言,只要能够提供合适的ActiveX脚本引擎就能使用任何脚本语言。
     脚本语言的选择往往基于许多不同原因:它可能是开发者最为熟悉的语言,可能是对给定工程来说能够提供最多特色支持的,也有可能是最具效率的。不同的环境和要求使得我们在选择脚本语言时注重不同的因素,同时也使得我们在某些时候面临选定的脚本语言不能直接提供其它语言固有的函数这一问题,或某个脚本已经写成但用的却是另外一种脚本语言。
     此时应该怎么办?是否需要用当前所用的脚本语言重写这些脚本?或者说,是否有可能在一种脚本语言中调用其它脚本语言的内置函数?本文要说明的就是在ASP应用中如何让VBScript脚本和JScript脚本交互以最大限度地获得两种脚本语言的特色支持。
     一、VBScript和JScript的内置函数
     在VBScript和JScript中,有大量的内置函数功能是相同或类似的。然而,在一种脚本语言中内置的函数并非总是在另外一种脚本语言中也有对应的函数。例如,VBScript提供了许多用于操作字符串和格式化数据的函数,这些函数在JScript中并不存在。这些函数包括StrReverse()、Filter()以及FormatCurrency()等。在另一方面,JScript所提供的用于管理数组、字符串编码等的函数在VBScript中也没有定义,如join()、reverse()、pow()、位操作、escape()和unescape()等。
     那么,如果在JScript程序中需要一个VBscript函数该怎么办呢?
     二、异种脚本的互相调用
     如果需要在JScript脚本中调用一个VBScript中内置的函数,则应该写一个VBScript用户定义函数(在这里调用VBScript内置函数),然后在JScript脚本中象调用公用JScript函数一样调用这个用户定义函数。
  
     例如,如果要调用的VBSCript内置函数是FormatCurrency(),则可以声明如下自定义函数:
  
   < SCRIPT LANGUAGE="VBSCRIPT" RUNAT="SERVER">
   Function FormatValue(Value)
    FormatValue = FormatCurrency(Value)
   End Function
   < /SCRIPT>
  
     接下来在JScript代码中就可以象普通JScript函数一样调用FormatValue()了。用类似的方法也可以实现VBScript代码调用JScript函数。
  
     应用同样的规则,我们可以在任何脚本内调用任何用户定义函数。不过,从JScript脚本内调用一个不带参数的VBScript过程(Sub)时应略加注意,此时在JScript中应该象调用一个不带参数的JScript函数一样调用它,如用foo()调用VBScript Sub foo过程。
  
     三、数据共享
  
     在某些情形下混合运用VBScript和JScript函数是非常有用的,但在不同语言脚本之间共享数据也可能很有用。实现这种共享的方法很简单:不管使用的是什么语言,只要是在页面级声明的变量就可以任意引用。
  
     对象的使用方法也相似,可以任意选用合适的语言读取、修改属性或调用对象的方法。当然给定对象的属性和方法是由创建该对象实例的语言所定义的。正如上例VBScript的过程调用,当从JScript中调用一个不带参数的VBScript对象的方法时,其调用方法也遵从JScript的调用规则,反之亦然。
  
     四、数组管理
  
     数组共享问题稍微复杂一点。虽然数组也象其它变量一样可以在不同语言脚本之间共享,但必须注意兼容方面的问题。
  
     VBScript数组在JScript下可以用VBScript的符号引用,即用myArray(2)引用数组元素而不是JScript的数组元素引用符号myArray[2]。此外,还可以使用一个特殊的JScript对象——VBArray对象将VBScript数组转换为JScript数组。下面的代码从VBScript数组myVBArray创建JScript数组myJSArray:
  
   var Temp = new VBArray(myVBArray)
   var myJSArray
   myJSArray = Temp.toArray()
  
     上述代码首先创建一个临时的VBArray对象,然后使用它的toArray()方法将自己转换为JScript数组。此后就可以象普通JScript数组一样使用myJSArray,如myJSArray[1]。但应当注意的是,toArray()方法将把一个多维的VBArray转换为一维的JScript数组。
  
     从VBScript中引用JScript数组更为复杂。虽然在VBScript中我们可以直接访问JScript数组相关的方法和属性,但没有直接访问JScript数组的单个元素的方法。也就是说,我们可以在VBScript脚本中读取JScript数组的长度属性,如下所示:
  
     x = myJSArray.length
  
     但无法直接读取该数组的单个元素,下面的VBScript代码是不正确的:
  
     x = myJSArray(3)
  
     解决该问题的一个可行的方法是执行一个转换过程,如下面的代码所示,此处假定VBScript是缺省的脚本语言:
  
  < %
    Dim Temp
    Dim myVBArray
    Temp = myJSArray.join(", ")
    myVBArray = Split(Temp, ", ")
  %>
  
     此处的JScript join()方法将数组myJSArray元素转换到一个以逗号为分割符的字符串,VBScript Split()函数将字符串转换为VBScript数组。注意这里我们是在VBScript环境下调用JScript的join方法。依照此例,我们可以通过自定义VBScript函数来模拟JScript的VBArray对象的toArray()方法以实现JScript数组到VBScript数组的转换。
  
     、小结
     在同一个ASP工程内灵活选用不同脚本语言具有许多优点,这些脚本之间的交互能力更为开发者集成不同语言所提供的内置函数和其它功能带来了更多的机会,同时也使得实现既可用于VBScript也可用于JScript环境的通用脚本库成为可能。

时间: 2024-12-31 10:37:21

实现vbscript和javascript互相调用方法的相关文章

vbscript和javascript互相调用

ASP具备管理不同语言脚本程序的能力,能够自动调用合适的脚本引擎以解释脚本代码和执行内置函数.ASP开发环境提供了两种脚本引擎,即VBScript(缺省)和JScript.不过,开发者并没有被限制于只能使用这两种语言,只要能够提供合适的ActiveX脚本引擎就能使用任何脚本语言. 脚本语言的选择往往基于许多不同原因:它可能是开发者最为熟悉的语言,可能是对给定工程来说能够提供最多特色支持的,也有可能是最具效率的.不同的环境和要求使得我们在选择脚本语言时注重不同的因素,同时也使得我们在某些时候面临选

JavaScript父子窗体间的调用方法_javascript技巧

本文实例讲述了JavaScript父子窗体间的调用方法.分享给大家供大家参考.具体如下: 如果要打开一个新窗口,使用 window.open( ) 方法. 如果要关闭自身窗口,使用 window.close( ) 方法. 一.父窗体 为了便于父窗口操作子窗口,可以为 window.open( ) 方法定义一个变量,例如: var opW = window.open("tests.html","popup","width=300,height=300&quo

在C#中调用VBScript、JavaScript等脚本的实现

javascript|vbscript|脚本 以前在做工作流(workflow)项目的时候,里面有一项就是在用户制定流程定义时可以编写脚本来控制活动的跳转,而这些脚本定义后存在数据库中,当流程启动的时候,工作流引擎会控制活动执行顺序,串型的两个活动比较简单,但有的活动到下一个活动有条件判断,或者存在多个分支,简单的还好,只要在数据库表中加个字段就可以实现,复杂一点的就需要通过脚本实现了.当时经验不够,几天都没找到快速的解决办法,想自己写一个自定义脚本引擎没有把握,而且时间也不够,还是在网上找找看

在C#中调用VBScript、javascript等脚本的实现代码_C#教程

一.使用MSScriptControl 到微软的网站上下载Windows Script Control,它是一个ActiveX(R) 控件,所以在.NET中使用我Interop了一下.下载安装完成后,新建一个C#的Windows应用程序项目,在解决方案资源管理器中选中引用节点,右键点击选择添加引用菜单,弹出添加引用对话框,单击浏览找到安装Windows Script Control的目录,选取msscript.ocx文件确定.那么在引用节点下会增加一个MSScriptControl组件,下面是他

javascript实现相同事件名称,不同命名空间的调用方法

  本文实例讲述了javascript实现相同事件名称,不同命名空间的调用方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <meta http-equiv

(转)ASP.NET调用javascript脚本的方法总结

1.直接在前台调用 javascript 函数   很简单,在 head 元素之间加入 script 元素,将 type 元素设置为 " text/javascript " 如: <head runat="server"><script type="text/javascript" >function ShowName(str){alert("您的名字为:("+str+")");}&

android-从 Javascript 中调用 Android 方法

问题描述 从 Javascript 中调用 Android 方法 我在 android 的 webview 中使用 geo-location 特征.使用 javascript (onload) 来调用Android 方法: public void getLocation() { _context.getLocation(); } 当程序执行到以下的位置时: public void locationUpdated(Location location) { NumberFormat frm = Nu

Android和JavaScript相互调用的方法_Android

本文实例讲述了Android和JavaScript相互调用的方法.分享给大家供大家参考,具体如下: Html页面和Java代码结合的方式一般用在界面经常被更改 的情况下,可以讲html放在网络中,软件一打开就会访问网络获取到最新的界面.缺点是会受到网络信号的影响,从而导致访问速度慢. 1.用WebView来显示HTML代码 2.允许WebView执行JavaScript 复制代码 代码如下: webView.getSettings().setJavaScriptEnabled(true); 3.

Javascript setInterval的两种调用方法(实例讲解)_javascript技巧

如下所示: 复制代码 代码如下: <!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>    <title>&l