WebBrowser 事件讲解

本文详细介绍了WebBrowser控件的各种事件,包括BeforeNavigate2、CommandStateChange、DocumentComplete等,阐述了每个事件的触发时机、参数和应用场景。特别强调了在事件处理中如何控制导航、监控状态变化以及新窗口的创建。此外,还讨论了事件发生序列,帮助开发者更好地理解和利用WebBrowser控件。
摘要由CSDN通过智能技术生成

由Internet Explorer 5激发事件

如你所知, Internet Explorer像其他COM对象一样激发事件—通过连接点.但实际上Internet Explorer如何激发事件呢?每次 Internet Explorer需要向客户提供关于当前活动状态的信息, Internet Explorer 激发通过DWebBrowserEvents2 连接点激发一个事件. (之前到版本 4, Internet Explorer 通过 DWebBrowserEvents 接口激发事件.但到了版本4.x和5, Internet Explorer 通过DWebBrowserEvents2 连接点.)

注意


如何领会到Internet Explorer加法那些事件?最佳途径是MSDN Online Web Workshop. 另外采用 OLE-COM Object Viewer

不像WebBrowser 控件 和 Internet Explorer的其他接口,是剑接口没有继承体系.DWebBrowserEvents 接口严格应用于Internet Explorer 3. 如果你正宿主WebBrowser 控件或者自动化Internet Explorer 5, 你可以通过此接口接收事件—但是不可挂接. DWebBrowserEvents2 接口包含的方法是为Internet Explorer 5定制的.用 DWebBrowserEvents2 替代DWebBrowserEvents ,你将有更多的控制能力. 所以不要忘记接口的最后面的2.

尽管DWebBrowserEvents2 是一个事件接口, 它其实就是像IWebBrowser2  一样的另外 COM 接口,所以它可以包含方法. (D 开头的命名是表示这是派遣接口.一个派遣接口是一个IDispatch 接口.但不同于普通接口, 派遣接口没有vtable.) 就像一个接口一样,派遣接口只不过提供一些函数的定义—他们并不真实实现.事件的实现由客户提供.举例来说,为了让WebBrowser 激发一个事件, 在DWebBrowserEvents2 接口中适当定义一些方法.这些方法由客户实现.但WebBrowser不直接调用这些方法.换句话讲, WebBrowser 并不调用DocumentComplete 方法.因为 DWebBrowserEvents2 是派遣接口, WebBrowser 通过IDispatch::Invoke调用客户的实现早期, 当WebBrowser 调用客户的Invoke 实现, WebBrowser 传递事件被激发的DISPID.

注意


某些工具如Visual Basic, MFC,  ATL 提供Invoke实现

表7-6 列出 WebBrowser 事件. (这些是WebBrowser 控件和Internet Explorer供有的事件,尽管有些事件仅仅用于自动化Internet Explorer).

注意


尽管有些方法为不包含2.尽管DWebBrowserEvents2 并非继承自WebBrowserEvents,DWebBrowserEvents2 还是匹配 DWebBrowserEvents 中被更改的,以免混淆。

注意表 7-6 重的参数有些值同样有 VARIANT_ TRUE 或 VARIANT_FALSE. 如果你使用Visual C++,确信分派使用这些值不要使用 TRUE 或 FALSE. 如果你使用Visual Basic, 它会自动帮助你转换,你可以比较True和False.

现在来仔细看看这些事件

Table 7-6 WebBrowser 事件

私有事件

描述

BeforeNavigate2

在导航之前发生. (该事件并不在不刷新页面的时候发生)

CommandStateChange

当命令状态改变时发生.该事件告诉你何时使能或者禁止 Back 以及Forward 菜单像或者按钮.

DocumentComplete

当整个文档完全完成装载时发生.如果你刷新页面此事件并不激发.

DownloadBegin

当一个下载项目开始时候发生 ,此事件也在你刷新(IWebBrowser2::Refresh.)时发生

DownloadComplete

党整个下载项目完成是发生该事件也发生在完成刷新页面.

NavigateComplete2

当整个导航完成该事件对应于 BeforeNavigate2.

NewWindow2

在一个新的窗口被创建以显示Web页或者其他资源的时候发生。譬如你在页面中以新建窗口的方式打开一个连接

OnFullScreen

FullScreen 属性被改变时候发生.此事件携带一个VARIANT_ BOOL类型的输入参数指示Internet Explorer 是否处于全屏(full-screen 模式(VARIANT_TRUE或者处于普通模式(VARIANT_FALSE).

OnMenuBar

菜单条MenuBar 属性被改变的时候发生一个VARIANT_ BOOL类型输入参数指  Internet Explorer的菜单条属性是可见(VARIANT_TRUE或者隐藏 (VARIANT_ FALSE).

OnQuit

Internet Explorer正在退出时发生该事件当用户关闭浏览器或者调用Quit 方法.

OnStatusBar

StatusBar 属性被改变的时候发生。事件携带VARIANT_ BOOL类型的输入参数 指示Internet Explorer的状态条是否可见 (VARIANT_TRUE或者隐藏 (VARIANT_FALSE).

OnTheaterMode

TheaterMode 属性被改变时发生事件携带VARIANT_ BOOL类型的输入参数 指示Internet Explorer的状态条是否可见 (VARIANT_TRUE或者隐藏 (VARIANT_FALSE).

OnToolBar

ToolBar属性被改变时发生事件携带VARIANT_ BOOL类型的输入参数 指示Internet Explorer的状态条是否可见 (VARIANT_TRUE或者隐藏(VARIANT_FALSE).

OnVisible

WebBrowser将被显示或者隐藏时发生。事件携带VARIANT_ BOOL类型的输入参数 指示Internet Explorer的状态条是否可见(VARIANT_TRUE或者隐藏 (VARIANT_FALSE).

ProgressChange

当下载进度被更新时候发生

PropertyChange

当属性改变时候发生。典型的PutProperty 方法被调用时

StatusTextChange

Internet Explorer  WebBrowser 控件改变状态条时候发生。即使webbrowser控件没有状态条。 StatusTextChange 给客户一个改变状态条的机会

TitleChange

.当文档对象的title可用或者改变的时候发生

BeforeNavigate2

BeforeNavigate2 就像字面上所说. 当Internet Explorer 导航到一个WEB页是激发; 因此, 当用户输入一个 URL, 点击 Back 或者 Forward 按钮, 或者处理一个导航时都会发生. BeforeNavigate2 也在WebBrowser 控件导航类方法调用时发生, 例如 NavigateNavigate2GoHome, 或者GoSearch. 也许, 该事件不会在你刷新页面时发生. 如果页面上有帧, BeforeNavigate2 将像顶级窗口一样被激发BeforeNavigate2 由7个输入参数, 见7-7.

Table 7-7 Input Parameters of the BeforeNavigate2 Event

Parameter

Description

pDisp

将发生导航的顶级窗口或者帧的Idispatch 接口的地址

URL

将导航至的URL

Flags

保留

TargetFrameName

显示资源的窗口或者帧的名字字符串,或者为NULL(如果没有命名)

PostData

HTTP POST 传输的数据地址

Headers

增加的将要发给服务器的 HTTP 一般HTTP头指定其它的服务器要求。传送给服务器的数据类型、状态马等

Cancel

cancel 标志的地址设置为TRUE可取消导航

注意打所属参数匹配于Navigate 或者 Navigate2的调用参数.如果 BeforeNavigate2 由一个或者多个导航类调用激发,这些导航类的方法参数 传递到BeforeNavigate2 方法.

在事件的句柄函数中, 你可以使用Cancel 参数取消导航, 或者你可以是用pDisp 参数修改导航目的.设置Cancel 参数为 VARIANT_TRUE 可以取消导航,如果你想,你可以通过pDisp修改参数导航信息且导航到另外的位置.举例来说,如果我们向停止当前导航, 增加一些头信息,且导航到原先的URL.在Visual Basic, 我们可以如下代码实现:

Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, _
                                        URL As Variant, _
                                        Flags As Variant, _
                                        TargetFrameName As Variant, _
                                        PostData As Variant, _
                                        Headers As Variant, _
                                        Cancel As Boolean)
 
   If TypeName(pDisp) = "WebBrowser" And Headers = "" Then
      pDisp.Stop
      pDisp.Navigate URL, Flags, TargetFrameName, PostData, _
                     Headers + "MyHe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值