浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】
原文:浏览器扩展系列————给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。
浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】的更多相关文章
- 浏览器扩展系列————异步可插入协议(pluggable protocol)的实现
原文:浏览器扩展系列----异步可插入协议(pluggable protocol)的实现 IE中有很多我们比较熟悉的协议,如http,https,mailto,ftp等.当然你也可以实现自己定义的协议 ...
- 浏览器扩展系列————在WPF中定制WebBrowser快捷菜单
原文:浏览器扩展系列----在WPF中定制WebBrowser快捷菜单 关于如何定制菜单可以参考codeproject上的这篇文章:http://www.codeproject.com/KB/book ...
- js中内置有对象
statpot:使用mongo+bootstrap+highcharts做统计报表 最近做了一个统计项目,这个统计项目大致的需求是统计接口的访问速度.客户端会调用一个接口来记录接口的访问情况,我的需求 ...
- MySQL管理之道:性能调优、高可用与监控内置脚本
MySQL管理之道:性能调优.高可用与监控内置脚本 随书附送脚本 keepalive配置文件和脚本开源工具pssh批量管理服务器(python) 下载地址 http://files.cnblogs.c ...
- 内置3D对象-Unity3D游戏开发培训
内置3D对象-Unity3D游戏开发培训 作者:Jesai 2018-02-12 19:21:58 五大面板: -Hierachy:当前场景中的物体 图 1-1 -Project:项目中的所有资源 图 ...
- Activiti系列: 如何给内置表单添加字段类型
对于内置的表单,除了原来支持的几种数据类型(string, long, enum, date, boolean, collection)之外,还可以自定义数据类型,比如增加一个javascript数 ...
- WeixinJSBridge:微信浏览器内置JavaScript 对象
微信公众平台开始支持前端网页,大家可能看到很多网页上都有分享到朋友圈,关注微信等按钮,点击它们都会弹出一个窗口让你分享和关注,这个是怎么实现的呢?今天就给大家讲解下如何在微信公众平台前端网页上添加分享 ...
- android webview 添加内置对象
package com.android.EBrowser; import android.app.Activity;import android.graphics.Rect;import androi ...
- GO语言系列(四)- 内置函数、闭包与高级数据类型
一.内置函数.递归函数.闭包 内置函数 1. close:主要用来关闭channel 2. len:用来求长度,比如string.array.slice.map.channel 3. new:用来分配 ...
随机推荐
- HDN2048(交错复发)
上帝.神与神 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- C++学习笔记25,析构函数总是会宣布virtual
为了永远记住析构函数声明virtual----><<effective c++>> 为这句话不一定对,但无需质疑的是这句话是非常实用的. 查看以下的样例: #includ ...
- 如何ios中间Safari在开发了类似的native app像全屏webapp
本文交换了我www.gbtags.com文章. <meta name="format-detection" content="telephone=no email= ...
- unix & linux oralce用户 内存使用情况分析
Linux*********************************************************************************************** ...
- 于linux已安装moodle
本文介绍了两个虚拟机的安装linux server 及相关服务,随着后这些基础.安装应用程序服务 moodle 2.7+ 它是使用最广泛的平台,网络课程. 在安装过程中moodle之前,需要支持软件 ...
- “GDI+ 发生一般错误” 解决方法
System.Runtime.InteropServices.ExternalException: GDI+ 发生一般错误 对应的帐户没有写权限,给予帐户写权限 版权声明:本文博主原创文章,博客,未经 ...
- 数据同步DataX
数据同步那些事儿(优化过程分享) 简介 很久之前就想写这篇文章了,主要是介绍一下我做数据同步的过程中遇到的一些有意思的内容,和提升效率的过程. 当前在数据处理的过程中,数据同步如同血液一般充满全过 ...
- 用Ghostscript API将PDF格式转换为图像格式(C#)
原文:用Ghostscript API将PDF格式转换为图像格式(C#) 由于项目需要在.net下将pdf转换为普通图像格式,在网上搜了好久终于找到一个解决方案,于是采用拿来主义直接用.来源见代码中注 ...
- Log4NET 数据库
阅读目录 Log4NET简介 前提 详细步骤 回到顶部 Log4NET简介 log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种 ...
- UVA 11584
Problem H: Partitioning by Palindromes We say a sequence of characters is a palindrome if it is the ...