WPF中WebBrowser的使用方法及分析

来源:互联网 发布:redis mysql同步 编辑:程序博客网 时间:2024/05/17 13:06

基础知识

WebBrowser类
承载并在HTML文档间导航。在WPF托管代码和HTML脚本间启用互操作性。
WebBrowser.Navigate方法(Uri)
异步导航到位于指定Uri处的文档。
命名空间:System.Windows.Controls
程序集:PresentationFramework(在PresentationFramework.dll中)
语法:public void Navigate(Uri source)

string szTmp = “http://192.168.0.11/sample.htm“;
Uri uri = new Uri(szTmp);
CamWeb.Navigate(uri);

WebBrowser.LoadCompleted事件
要导航到的文档完成下载时发生
向导航的事件处理程序传递了NavigationEventArgs类的一个实例。
C#语法:
public event LoadCompletedEventHandler LoadCompleted
XAML语法:

WebBrowser.Document属性
获取表示所承载的HTML页的文档对象
MSHTML 是微软的窗口操作系统(Windows)搭载的网页浏览器—Internet Explorer的排版引擎的名称,(又称为Trident)。
MSHTML是微软公司的一个COM组件,该组件封装了HTML语言中的所有元素及其属性,通过其提供的标准接口,可以访问指定网页的所有元素。
MSHTML提供了丰富的HTML文档接口,有IHTMLDocument、IHTMLDocument2、…、IHTMLDocument7等7种。其中,IHTMLDocument只有一个Script属性,是管理页面脚本用的;
IHTMLDocument2接口跟C#的HtmlDocument类(即通过Web Browser控件直接获得的Document属性)很相似;IHTMLDocument3是跟Visual Basic 6.0里的文档对象相似的一个接口,基本上可以用到的方法都在其中。
MSHTML还提供封装了对HTML元素完整操作的IHTMLElement接口,通过IHTMLElement,可以准确地判断HTML元素节点的类型,还可以获取HTML元素节点的所有属性。

实际应用

WebBrowser控件不停的导航一个.html文件,直到导航成功。
但是如果想要导航的.html文件刚开始不存在,一段时候后才存在的话就有些棘手。
可以采用延时,但是.html产生的时间是不确定的,这样就无法确定延时的秒数。
所以可以采用以下方法:
在XAML文件中加入:

<WebBrowser Name="CamWeb" Width="640" Height="480"LoadCompleted="CamWeb_LoadCompleted" />

在.CS文件的初始化中加入:

string szTmp = "http://192.168.0.11/sample2.htm";Uri uri = new Uri(szTmp);CamWeb.Navigate(uri);

在.CS文件中实现 LoadCompleted事件:

private void CamWeb_LoadCompleted(object sender, NavigationEventArgs e){    ((sender as WebBrowser).Document as mshtml.HTMLDocumentEvents_Event).oncontextmenu += new mshtml.HTMLDocumentEvents_oncontextmenuEventHandler(ExtendFrameControl_oncontextmenu);    mshtml.HTMLDocument dom = (mshtml.HTMLDocument)CamWeb.Document; //定义HTMLdom.documentElement.style.overflow = "hidden"; //隐藏浏览器的滚动条dom.body.setAttribute("scroll", "no"); //禁用浏览器的滚动条    if (!dom.body.innerHTML.Contains("123456"))    {        string szTmp = "http://192.168.0.11/sample2.htm";        Uri uri = new Uri(szTmp);        CamWeb.Navigate(uri);    }}
1 0