浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】

原文: 浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】

使用场合:

         在程序中使用WebBrowser或相关的控件如:axWebBrowser等。打开本地的html文件时,可以在html的脚本中使用自己在.net中定义的类,实现与Internet Explorer server的互操作。此外也可以在充分利用html在设计界面方面高效,简单的同时,也可以实现一些复杂的特性。

实现:

ContractedBlock.gif ExpandedBlockStart.gif 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类实现了对脚本事件的封装。

具体使用如下:

ContractedBlock.gif ExpandedBlockStart.gif 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值