通过WebBrowser 控件承载的网页与包含控件的应用程序之间的通信
2012-03-13 11:44
351 查看
若要使用该属性启用WebBrowser 控件承载的网页与包含WebBrowser 控件的应用程序之间的通信,一般使用WebBrowser.ObjectForScripting
属性,一般来说只需要使用该属性可以将动态 HTML (DHTML) 代码与客户端应用程序代码集成在一起。为该属性指定的对象可作为window.external
对象(用于主机访问的内置 DOM 对象)用于网页脚本。 具体使用如下:
这里只写个小例子,就用默认的命名方式,http://10.130.40.220:9081/Test.asp是一个发布的测试页面,在该示例中,ObjectForScripting
属性被设置为一个类的单件对象,为该属性指定的对象可作为window.external 对象。
Method类定义如下:
这里定义了一个单件共使用,提供了Method4Script方法。
最终网页的脚本语言里调用如下:
这样的话html中就可以使用程序的处理方法,事实是这样吗?
当我们编译通过后运行之后会发现出现了异常:
这说明在设置过webBrowser控件的ObjectForScripting属性后,还需要设置应用程序对com可见,同时还需要
添加类的访问修饰字public:
这时可以正常使用:
同样,若要从客户端应用程序代码调用网页中定义的函数,请使用可从Document 属性检索的
HtmlDocument 对象的HtmlDocument.InvokeScript
方法,添加一个按钮,按钮响应事件处理如下:
页面脚本添加:
最终效果如下:
需要注意的是其安全性为供直接调用方使用此控件。要求值:LinkDemand;命名的权限集:FullTrust。到此
通过WebBrowser 控件承载的网页与包含控件的应用程序之间的通信就简单介绍到这里。
属性,一般来说只需要使用该属性可以将动态 HTML (DHTML) 代码与客户端应用程序代码集成在一起。为该属性指定的对象可作为window.external
对象(用于主机访问的内置 DOM 对象)用于网页脚本。 具体使用如下:
Uri url = new Uri("http://10.130.40.220:9081/Test.asp"); this.webBrowser1.Navigate(url); this.webBrowser1.ObjectForScripting = Method.Instance;
这里只写个小例子,就用默认的命名方式,http://10.130.40.220:9081/Test.asp是一个发布的测试页面,在该示例中,ObjectForScripting
属性被设置为一个类的单件对象,为该属性指定的对象可作为window.external 对象。
Method类定义如下:
class Method { private static Method m_Instance; private static object m_LockObject = new object(); public static Method Instance { get { if (m_Instance == null) { lock (m_LockObject) { if (m_Instance == null) m_Instance = new Method(); } } return m_Instance; } } public void Method4Script(string command) { MessageBox.Show("调用成功"); } }
这里定义了一个单件共使用,提供了Method4Script方法。
最终网页的脚本语言里调用如下:
function LocalMethod4Script(context) { document.all.txtResult.value= ""; var result = window.external.Method4Script(); document.all.txtResult.value= context + "<======>" + result; }
这样的话html中就可以使用程序的处理方法,事实是这样吗?
当我们编译通过后运行之后会发现出现了异常:
这说明在设置过webBrowser控件的ObjectForScripting属性后,还需要设置应用程序对com可见,同时还需要
添加类的访问修饰字public:
[ComVisible(true)]
public class Method
//class Method { private static Method m_Instance; private static object m_LockObject = new object(); public static Method Instance { get { if (m_Instance == null) { lock (m_LockObject) { if (m_Instance == null) m_Instance = new Method(); } } return m_Instance; } } public void Method4Script(string command) { MessageBox.Show("调用成功"); } }
这时可以正常使用:
同样,若要从客户端应用程序代码调用网页中定义的函数,请使用可从Document 属性检索的
HtmlDocument 对象的HtmlDocument.InvokeScript
方法,添加一个按钮,按钮响应事件处理如下:
this.webBrowser1.Document.InvokeScript("EventHandler", new object[] {"hello"});
页面脚本添加:
function EventHandler(message) { alert(message); }
最终效果如下:
需要注意的是其安全性为供直接调用方使用此控件。要求值:LinkDemand;命名的权限集:FullTrust。到此
通过WebBrowser 控件承载的网页与包含控件的应用程序之间的通信就简单介绍到这里。
相关文章推荐
- 在WebBrowser中通过模拟键盘鼠标操控网页中的文件上传控件
- WTL 通过IWebBrowser2接口使WebBrowser控件在自己的窗口打开网页
- WTL 通过IWebBrowser2接口使WebBrowser控件在自己的窗口打开网页 .
- 如何清除应用程序承载 WebBrowser 控件时缓存
- 在WebBrowser中通过模拟键盘鼠标操控网页中的文件上传控件
- 在WebBrowser中通过模拟键盘鼠标操控网页中的文件上传控件
- 使用WebBrowser控件与网页通信,互相调用
- 在WebBrowser中通过模拟键盘鼠标操控网页中的文件上传控件
- WTL 通过IWebBrowser2接口使WebBrowser控件在自己的窗口打开网页
- WTL 通过IWebBrowser2接口使WebBrowser控件在自己的窗口打开网页
- 如何清除应用程序承载 WebBrowser 控件时缓存
- Delphi 两个应用程序(进程)之间的通信
- 使用netlink机制在内核与应用程序之间通信(转载)
- 通过内核对象在服务程序和桌面程序之间通信的小问题
- VB.NET 通过窗口句柄,获取webbrowser控件HTML内容
- VC-基础-WebBrowser控件中弹出新网页窗口
- 通过TCP通信,Java与Dotnet之间数据编码
- 驱动程序和应用程序之间通信(ForWinCE)(转载)
- 《WebBrowser》——— 可视区域设置,防止控件默认的自动缩小网页(可以解决加载html时字体先大后小)
- 通过Mechanize模拟自然的浏览器行为来完成与网页之间的交互.