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

简介: 原文:浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】使用场合:          在程序中使用WebBrowser或相关的控件如:axWebBrowser等。打开本地的html文件时,可以在html的脚本中使用自己在.net中定义的类,实现与Internet Explorer server的互操作。
原文: 浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】

使用场合:

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

实现:

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

具体使用如下:

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.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
目录
相关文章
|
前端开发
WebView2 控件(基于 Microsoft Edge (Chromium) 的嵌入式浏览器控件),保存资源(图片、脚本、CSS)
WebView2 控件(基于 Microsoft Edge (Chromium) 的嵌入式浏览器控件),保存资源(图片、脚本、CSS)
618 79
|
编解码 JavaScript 前端开发
【Java进阶】详解JavaScript的BOM(浏览器对象模型)
总的来说,BOM提供了一种方式来与浏览器进行交互。通过BOM,你可以操作窗口、获取URL、操作历史、访问HTML文档、获取浏览器信息和屏幕信息等。虽然BOM并没有正式的标准,但大多数现代浏览器都实现了相似的功能,因此,你可以放心地在你的JavaScript代码中使用BOM。
434 23
|
Web App开发 人工智能 JSON
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
AutoMouser是一款Chrome扩展程序,能够实时跟踪用户交互行为,并基于OpenAI的GPT模型自动生成Selenium测试代码,简化自动化测试流程。
1440 17
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
|
XML 编解码 JavaScript
DOM(文档对象模型)和 BOM(浏览器对象模型)
【10月更文挑战第19天】在前端开发中,理解 DOM(文档对象模型)和 BOM(浏览器对象模型)是至关重要的。它们是 Web 开发的基础,为我们提供了与网页文档和浏览器进行交互的能力。
2114 62
|
JSON 移动开发 JavaScript
在浏览器执行js脚本的两种方式
【10月更文挑战第20天】本文介绍了在浏览器中执行HTTP请求的两种方式:`fetch`和`XMLHttpRequest`。`fetch`支持GET和POST请求,返回Promise对象,可以方便地处理异步操作。`XMLHttpRequest`则通过回调函数处理请求结果,适用于需要兼容旧浏览器的场景。文中还提供了具体的代码示例。
412 5
在浏览器执行js脚本的两种方式
|
Web App开发 数据采集 JavaScript
Chrome浏览器实例的TypeScript自动化脚本
Chrome浏览器实例的TypeScript自动化脚本
|
Web App开发 搜索推荐 安全
|
Web App开发 JavaScript 前端开发
JavaScript Window - 浏览器对象模型
JavaScript Window - 浏览器对象模型
288 3
|
JavaScript 前端开发
js之浏览器对象|28
js之浏览器对象|28
|
Web App开发 存储 安全
Python编写脚本,打开浏览器输入网址,自动化登陆网站
Python编写脚本,打开浏览器输入网址,自动化登陆网站
2191 5

热门文章

最新文章