一个简单的例子:
将如下代码另存为.wsc文件,并右键“注册”(卸载时右键“不注册”)。
<Component>
<registration ProgId=hello.world />
<public>
<property name=testStr />
<method name=add>
<parameter name=x />
<parameter name=y />
</method>
</public>
<script>
var testStr="默认值";
function add(x, y)
{
return x+" + "+y+" = "+(x+y);
}
</script>
</Component>
然后可以通过new ActiveXObject("hello.world")的方法来调用该控件。
例如:(另存为.js后双击运行。)
var com=new ActiveXObject("hello.world");
WSH.Echo(com.testStr);
WSH.Echo(com.add(84,25));
这样就可以将javascript代码嵌入到其他编程语言中。
另外,不注册也可以调用该控件,例如:(另存为.js后双击运行。)
var com=GetObject("script:http://www.zope.org/Members/Rimifon/ZopeTest/Sample.wsc");
WSH.Echo(com.testStr);
WSH.Echo(com.add(84,25));
注意的是,JS的GetObject方法因为安全限制,在IE下可能是不能运行的。
还可以使用
regsvr32 http://www.zope.org/Members/Rimifon/ZopeTest/Sample.wsc
指令对远程脚本部件进行本地注册,也可以使用:
regsvr32 http://www.zope.org/Members/Rimifon/ZopeTest/Sample.wsc /u
进行卸载。
wsc脚本部件注册的控件,受安全限制,因此可能并不适合应用在IE上,比较适合应用在asp或其他编程语言中。 如果服务器注册了该脚本部件,则可以使用:
Set Obj = Server.CreateObject("Hello.World")
如果服务器没有注册该脚本部件,则可以这样:
Set Obj = Server.GetObject("script:http://www.zope.org/Members/Rimifon/ZopeTest/Sample.wsc")
这种方式(这里的URL可以换成本地脚本部件文件所在的绝对地址)。
运用实例:
改写了编程浪子 的js无组件上传,在本地创建远程脚本组件。
<html><head><meta http-equiv="Content-Type"content="text/html;charset=gb2312">
<title>测试远程控件调用</title><%
Dim strInfo
If Request.ServerVariables("Request_Method") = "POST" Then
'Set Upload = Server.CreateObject("Rimifon.Upload")
Set Upload = GetObject("script:http://www.zope.org/Members/Rimifon/ZopeTest/Upload.wsc")
Upload.ReadForm()
strInfo = Upload.SaveFile(".")
Upload.Dispose()
Set Upload = Nothing
End If
Function Info()
Info = strInfo
End Function
%></head><body>
<font color="red"><%=Info()%></font>
<form method=post enctype="multipart/form-data">
<input name="upFile" type="file"><input type="submit">
</form></body></html>
远程调用在Wind2000下测试通过。自己的2003下失败了:(。
本地调用测试通过。
如果服务器没有注册的话,推荐使用本地调用的方法:
Set Upload = GetObject("script:"+Server.MapPath("Upload.wsc"))
这样能防止网络故障而出现的错误。