浏览器扩展系列————给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:用来分配 ...
随机推荐
- 查看oracle数据库的连接数以及用户
查看oracle数据库的连接数以及用户 11.查询oracle的连接数2select count(*) from v$session;32.查询oracle的并发连接数4select count(*) ...
- Apache Commons Math3学习笔记(2) - 多项式曲线拟合(转)
多项式曲线拟合:org.apache.commons.math3.fitting.PolynomialCurveFitter类. 用法示例代码: // ... 创建并初始化输入数据: double[] ...
- 软体project(两)——软体project
每本书的第一章,都是在讲宏观的东西.软工也不例外.接下来.我们就要介绍软件project"是什么"的问题. 一.是什么? watermark/2/text/aHR0cDov ...
- 【转】Android 避免APP启动闪黑屏(Theme和Style)
前几天Boss就反应说,机器每次启动程序都会闪一下黑屏,这个客户不接受.没办法,只能想想怎么解决,最后找到了下面的方法.闪黑屏的原因主要是我们启动Activity的时候,需要跑完onCreate和on ...
- Matlab Newton‘s method
定义函数 function y=f(x) y=f(x).%函数f(x)的表达式 end function z=h(x) z=h(x).%函数h(x)的表达式 end 主程序 x=X;%迭代初值 i=0 ...
- 刷牙LeetCode思考
时间已经到了不自觉地,3在五月中旬.今天正式LeetCode自由181刷牙的问题.感觉,以提高他们的算法非常有帮助. 第一个主要的深搜索,广泛搜索,DP他已经掌握7788.也有自己写的代码格公式,使用 ...
- Net 项目代码风格
.Net 项目代码风格要求 .Net 项目代码风格要求 PDF版下载:项目代码风格要求V1.0.pdf 代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求&g ...
- 使 IIS 6.0 可以在 64 位 Windows 上运行 32 位应用程序 试图加载格式不正确的程序。
原文 使 IIS 6.0 可以在 64 位 Windows 上运行 32 位应用程序 试图加载格式不正确的程序. win7 64位操作系统上边运行IIS网站应用的时候,提示错误"试图加载格式 ...
- Extjs 4.2 右键菜单树节点(,选择逆,废除)
写自己的最新版本号extjs4.2树节点的操作,记录它,可能在将来被用于. var tree = new Ext.tree.TreePanel({ flex: 1, animate: true, au ...
- uva 10652 Board Wrapping (计算几何-凸包)
Problem B Board Wrapping Input: standard input Output: standard output Time Limit: 2 seconds The sma ...