WPF中WebBrowser的使用方法及分析

基础知识

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; //定义HTML
dom.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);
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-29 23:18:27

WPF中WebBrowser的使用方法及分析的相关文章

WPF中使用ObjectDataProvider绑定方法

原文:WPF中使用ObjectDataProvider绑定方法 ObjectDataProvider提供了绑定任意.net类型的功能,具体功能如下: 1.ObjectDataProvider提供了绑定任意CLR类型的公嫩那个. 2.它可以再XAML中利用生命史的语言以及参数化的构造函数完成对数据的创建 3.增加对成员函数的绑定 4.提供了更多的异步绑定的功能 下面用一个加法计算器来进行实例说明: 请先看我们的加法类: C#代码 namespace BindingDemo {     public

白盒测试中的六种覆盖方法案例分析

一.语句覆盖(Statement coverage) "语句覆盖"是一个比较弱的测试标准,它的含义是:选择足够的测试用例,使得程序中每个语句至少都能被执行一次.                                          图6.4是一个被测试的程序,它的源程序是: PROCEDURE M(VAR A,B,X:REAL): BEGIN IF(A>1) AND (B=0)  THENX:=X/A: IF(A=2)OR (X>1)  THENX:=X+1:

WPF中Enter 焦点转移方法

1.Set the TabIndex="16"2. private void detailGrid_Keydown(object sender, KeyEventArgs e) { try { if (e.Key == Key.Enter) { TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next); UIElement focusElement = Keyboard.FocusedE

JS实现alert中显示换行的方法

转自脚本之家: 这篇文章主要介绍了JS实现alert中显示换行的方法,实例分析了两种实现alert换行的实现技巧,非常简单实用,需要的朋友可以参考下 本文实例讲述了JS实现alert中显示换行的方法.分享给大家供大家参考,具体如下:先来介绍一种比较复杂的方法,但这种方法使用起来对所有型号的浏览器都能任意分辨: //浏览器类型判定 function getOs() {   if(navigator.userAgent.indexOf("MSIE")>0) {      return

浏览器扩展系列————在WPF中定制WebBrowser快捷菜单

原文:浏览器扩展系列----在WPF中定制WebBrowser快捷菜单 关于如何定制菜单可以参考codeproject上的这篇文章:http://www.codeproject.com/KB/books/0764549146_8.aspx?fid=13574&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=26#xx0xx 本文主要讲述如何在这篇文章中的ShowContextMenu方法中弹出自己的Conte

在WPF的WebBrowser控件中屏蔽脚本错误的提示

在WPF中使用WebBrowser控件显示网页时,经常会报脚本错误的提示,如何屏蔽掉这些错误提示呢.方法是定义如下方法: public void SuppressScriptErrors(WebBrowser wb, bool Hide) { FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);

在WPF中嵌入WebBrowser可视化页面

无论是哪种C/S技术,涉及数据可视化就非常的累赘了,当然大神也一定有,只不过面向大多数人,还是通过网页来实现,有的时候不想把这两个功能分开,一般会是客户的原因,所以我们打算在WPF中嵌入WebBrowser,然后使用ECharts 完成复杂的图表展示,其功能不亚于一个名为Devexpress的图标库,而且这东西还收费(呵呵),本文就对WebBrowser+ECharts进行了演示. 首先下载一下Echats.js文件以及Jquery文件并且创建一个Html页面,在我们项目的bin文件夹中. 在h

WPF中嵌入普通Win32程序的方法

公司现在在研发基于.Net中WPF技术的产品,由于要兼容旧有产品,比如一些旧有的Win32程序.第三方的Win32程序等等,还要实现自动登录这些外部Win32程序,因此必须能够将这些程序整合到我们的系统中来,让使用者看起来它们好像是一个程序. 在MSDN中有专门的章节提到了在WPF中嵌入Win32控件的办法,那就是使用 HwndHost ,只要把 Win32控件的句柄传递给 HwndHost 就可以了.MSDN中的例子演示的都是在同一个进程内创建的 Win32控件,我一开始认为只要通过FindW

WPF中嵌入WinForm中的webbrowser控件

原文:WPF中嵌入WinForm中的webbrowser控件 使用VS2008创建WPF应用程序,需使用webbrowser.从工具箱中添加WPF组件中的webbrowser发现其中有很多属性事件不能使用.决定还是使用WinForm中的webbrowser.要想在WPF中使用WinForm控件,查看MSDN,需经过以下步骤. 创建名为 HostingWfInWpf 的 WPF 应用程序项目. 在解决方案资源管理器中,添加一个对名为 WindowsFormsIntegration.dll 的 Wi