浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】
2024-09-26 05:35:06
原文:浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】
使用场合:
在程序中使用WebBrowser或相关的控件如:axWebBrowser等。打开本地的html文件时,可以在html的脚本中使用自己在.net中定义的类,实现与Internet
Explorer server的互操作。此外也可以在充分利用html在设计界面方面高效,简单的同时,也可以实现一些复杂的特性。
实现:
Code
public class ScriptEvent
{
//System.__ComObject 对象
private object eventObject;
public object EventObect
{
get { return this.eventObject; }
set { this.eventObject = value; }
}
public object Execute()
{
if (null == eventObject)
return null;
//JScript.dll中FunctionInstance接口的Guid
Guid fun_gid = new Guid("{3EEF9758-35FC-11D1-8CE4-00C04FC2B093}");
Type functionInstance = Type.GetTypeFromCLSID(fun_gid);
object rev;
rev = functionInstance.InvokeMember("call", BindingFlags.InvokeMethod | BindingFlags.NonPublic, null, eventObject, null);
return rev;
}
ScriptEvent类实现了对脚本事件的封装。
具体使用如下:
Code
[ComVisibleAttribute(true)]
public class ScriptObject
{
private Window window;
private ScriptEvent onClickEvent;
public ScriptObject(Window window)
{
this.window = window;
onClickEvent = new ScriptEvent();
}
public string WindowTitle
{
get { return window.Title; }
}
public double Add2(double num1, double num2)
{
return num1 + num2;
}
public object onClick
{
get { return onClickEvent.EventObect; }
set { onClickEvent.EventObect = value; }
}
public void OnClick()
{
onClickEvent.Execute();
}
onClick属性对应与Javascript脚本中ScriptObject类的onClick事件。在脚本中可以把一个function实例赋给此类的onClick属性。
因为在javascript中事件并不等同于.net中的事件,具体来说就是javascript中不允许绑定多个事件,所以可以一个事件实现为一个函数对象,通过用com viewer查看System32下的Jscript.dll可以看到,此对象对应于其中的FunctionInstance接口,所以在此就使用了反射构造了这个接口,然后调用其真正的脚本函数。
具体代码下载http://files.cnblogs.com/chinese-zmm/ScriptObjectDemo.rar。
最新文章
- IE浏览器中Image对象onload失效的解决办法
- [原]在AMD机器上使用android studio
- C++自定义修饰键,实现如<;Capslock+J>;等组合键的按键映射
- codeforces B. The Fibonacci Segment 解题报告
- jsp自定义标签分析
- hdu 4417 划分树
- SQL Server 的各种查询和要申请的锁
- SQL server 表数据改变触发发送邮件
- Spring3.2 HelloWorld
- ZOJ	1655 FZU 1125 Transport Goods
- 小项目:聊天室 (jQuery,PHP,MySQL)
- 《剑指offer》整数中1出现的次数
- 从零开始一起学习SLAM | 点云到网格的进化
- jmeter 报错Error in NonGUIDriver java.lang.IllegalArgumentException: Report generation requires csv output format, check &#39;jmeter.save.saveservice.output_format&#39; property
- day82
- 关于php-fpm方式和apache配合使用的几点记录
- C++ code:函数指针数组
- rhel5.4+oracle 10g rac
- Unity3D学习笔记(六):三角函数和点乘
- cf-789A (思维)
热门文章
- hdu 2454 Degree Sequence of Graph G (推断简单图)
- Memcahce(MC)系列(三)Memcached它PHP转让
- 于SharePoint经营SharePoint Designer建立
- C#之关于时间的整理
- LightOJ 1205 Palindromic Numbers
- ext3文件系统反删除利器ext3grep应用实战
- javascript中间preventDefault与stopPropagation角色介绍
- MVC把随机产生的字符串转换为图片
- Android 根据规划 Touch 分配和消费机制的事件
- crm创建报告补充导航