开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 6444|回复: 2
收起左侧

[js/PHP求助] Microsoft ScriptControl 控件使用指南

[复制链接]

结帖率:100% (3/3)
发表于 2012-4-1 13:54:28 | 显示全部楼层 |阅读模式   湖南省益阳市
随着动态网页的出现,脚本语言已经被越来越多的人认识、接受并撑握。在程序中加入对脚本的支持一方面可以最大限度的扩展程序的应用范围,另一方面也方便程序员利用现有脚本提供的一些特别的功能(如正则表达式等)。下面结合我个人的一点经验谈一谈这方面的应用。
很显然要自己去实现一个脚本解释器是不现实的。好在已经有了可以复用的组件,那就是Microsoft ScriptControl。这是一个ActiveX控件,随Windows2000一起发布,如果要在2000以前的Windows中使用则需要安装该控件(可以到MS的网站上找到)。
ScriptControl接口

属性名称
类型
备注
AllowUI
BOOL
检测是否允许运行用户的接口元素。如果为False,则诸如消息框之类的界面元素不可见。
CodeObject
Object
脚本暴露给宿主调用的对象。只读。
Modules
Modules
宿主提供给脚本的组件库模块。只读。(COM组件通常都是以对象收集的形式向用户提供可以留给用户二次开发的对象集合,每一个收集即一个Modules
Language
String
设置或获取脚本引擎解释的语言,例如:VBScriptJScript
Name
String
脚本引擎的名称。只读。
Procedures
Procedures
返回模块中定义的过程的集合
SitehWnd
HWND
在脚本中显示UI的父窗口句柄
State
Enum
设置或返回控件的状态,如果为0,控件只执行语句但不转发事件,为1则为加入的本控件接受的对象转发事件。
Timeout
Long
控件的执行脚本的超时值,-1表示不超时
UseSafeSubset
BOOL
设置或返回宿主程序是否关心安全。宿主程序的安全级别可以从此属性设置
Error
Error
错误对象,发生错误时,此属性返回一个错误对象

方法名称
参数
功能
AddCode
Code As String
往脚本引擎中加入要执行的脚本
AddObject
Name As String, Object As Object, [AddMembers As Boolean = False]
往脚本引擎加入一个对象,以便在脚本中可以使用该对象提供的方法等。
Eval
Expression As String
表达式求值
ExecuteStatement
Statement As String
解释并执行脚本语句
Reset
丢弃所有的对象和代码,将State属性置0
Run
ProcedureName As String, ParamArray Parameters() As Variant
运行一个指定的过程

事件名称
功能
Error
有错误发生时激发该事件
TimeOut
执行过程超时时发生

一般使用方法
1、在程序中加入ScriptControl
2、定义一个ScriptControl的实例
3、调用AddCode等方法向脚本引擎中加入要执行的脚本。
4、调用Run执行要执行的脚本函数。
宿主与脚本的通讯
1、  宿主调用脚本:这个过程比较简单,只要调用Run就可以将参数传递到脚本。
2、  脚本调用宿主:在初始化过程中调用AddObject接口,将宿主的一个或多个对象暴露给脚本,这时就可以在脚本中调用宿主对象的方法。在VC++中这个对象不是普通的C++类,它必须支持自动化,在脚本中也只能调用对象中自动化接口(在VB中这个个程相对比较简单)。
脚本调试
任何人写的代码都不可能一次就很完美,但是脚本由于执行的位置特殊,调试方法也不一样。首先下载一个脚本调试器(我用的是Microsoft Script Debugger, MS网站有下载,另据说其它的如VJ++也可以),安装以后在菜单上没有启动菜单。
调试器的启动
在一般的高级语言中都可以方便的设置断点,但是在启动脚本调试器以前如何开始调试呢?在IE中脚本出错会自动提示是否调试,还可以在脚本中加入中断代码(VBScript: Stop JavaScript: debugger,但是在ScriptControl还需要修改一下注册表才可以,你需要将HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings下的JITDebug的值改为1(默认为0
===================================
例子:
.版本 2
脚本对象.创建 (“ScriptControl”, )
脚本对象.写属性 (“Language”, “javascript”)
脚本对象.方法 (“AddCode”, “function a(){return(new Date().getTime());}function js_escape(pam_escape){return(escape(pam_escape));}function js_encodeURIComponent(pam_encodeURIComponent){return(encodeURIComponent(pam_encodeURIComponent));}function js_time(){return(new Date().getTime());}”)
信息框 (脚本对象.通用方法 (“run”, “js_escape”, “我”).取文本 (), 0, )
信息框 (脚本对象.通用方法 (“run”, “js_encodeURIComponent”, “我”).取文本 (), 0, )
信息框 (到文本 (脚本对象.通用方法 (“run”, “js_time”).取数值 ()), 0, )





本帖被以下淘专辑推荐:

结帖率:17% (1/6)
发表于 2012-4-1 14:38:41 | 显示全部楼层   贵州省遵义市
不知道能不能返回对象
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2018-3-14 11:56:39 | 显示全部楼层   广西壮族自治区桂林市
留下我宝贵的足迹
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表