导航:  CWebBrowser Class > WebBrowser Events >

NavigateError

上一页返回章节概述下一页

描述

 

在导航过程中发生错误时引发火灾.

 

语法

SUB NavigateError ( _

   BYVAL hwndContainer AS HWND, _

   BYVAL pDisp AS IDispatch PTR, _

   BYVAL vURL AS VARIANT PTR, _

   BYVAL vTargetFrameName AS VARIANT PTR, _

   BYVAL vStatusCode AS VARIANT PTR, _

   BYVAL pbCancel AS VARIANT_BOOL PTR _

)

 

参数

hwndContainer

[in]处理的OLE容器窗口.

pDisp

[in]指针指向一个IDispatch接口的WebBrowser表示窗口或框架中的导航误差的发生.这个界面可以查询的IWebBrowser2接口.

vURL

[in]指向VARIANTVT_BSTR包含URL,导航失败.

vTargetFrameName

[in]指向VARIANTVT_BSTR包含框架中的资源是要显示的名称,或NULL如果没有命名的框架是针对资源.

vStatusCode

[in]指向VT_I4含有错误的状态码,如果有.一系列可能的HRESULT和HTTP状态码,看NavigateError Event Status Codes.

pbCancel

[in, out]指向VARIANTVARIANT_BOOL指定是否取消导航到错误的网页和/或任何进一步的自动搜索.

VARIANT_FALSE

违约.继续导航到错误的网页和/或自动搜索.

VARIANT_TRUE

取消导航到错误的网页和/或自动搜索.

 

返回值

 

无返回值.

 

DISPID 事件

 

DISPID_NAVIGATEERROR

 

此事件的DISPID定义在exdispid.inc.使用此值来确定事件处理程序时,执行的IDispatch接口Invoke method.

 

备注

 

此事件在Internet Explorer由于导航错误而显示错误页之前引发.一个应用程序有机会通过设置bCancel参数VARIANT_TRUE停止错误页面显示.然而,如果在原导航联系服务器提供了自己的替代页面导航,设置bCancelVARIANT_TRUE将没有效果,导航到服务器的备用页将继续.例如,假设一个导航http://www.www.wingtiptoys.com/bigsale.htm因为网页不存在原因事件.然而,服务器将您重定向到http://www.www.wingtiptoys.com/home.htm相反.在这种情况下,设置bCancelVARIANT_TRUE没有影响导航将继续http://www.www.wingtiptoys.com/home.htm.

 

pDisp参数应用于匹配这一事件与相应的NavigateNavigate2请求.例如,多NavigateError事件可以火一NavigateNavigate2请求.出现这种现象的原因包括一个自动搜索引擎与多个帧或多尝试URL导航解决在每一种情况下无效的URL.,URL传递到这些事件可能不匹配的URL原本要求.然而,这些事件都会有相同的离散度.

 

与其他的事件,你可以捕获的NavigateError事件实施IDispatch.Invoke作为你的事件接收器,并连接到WebBrowser控件的diid_dwebbrowserevents2连接点.然后你可以提取信息,如从方法的pDispParams参数状态代码.下面的代码片段改编从simpleatlbrowser示例应用程序的事件接收器.它显示了如何捕获NavigateError事件提取状态代码和IDispatch指针.详情见样品.

 

HRESULT CAtlWbHost::Invoke(DISPID dispIdMember,

                          REFIID riid,

                          LCID lcid,

                          WORD wFlags,

                          DISPPARAMS *pDispParams,

                          VARIANT *pvarResult,

                          EXCEPINFO *pexcepinfo,

                          UINT *puArgErr)

{

   switch(dispIdMember)

   {

   ...

   case DISPID_NAVIGATEERROR :

       //Extract the status code from the DISPPARAMS structure

       VARIANT * vt_statuscode = pDispParams->rgvarg[1].pvarVal;

       DWORD  dwStatusCode =  vt_statuscode->lVal;

               ...

       //Extract the event's IDispatch pointer

       IDispatch *pdispFiredEvent = pDispParams->rgvarg[4].pdispVal;

               ...

       break;

   ...

}

 

一个URL进入NavigateNavigate2可能不匹配的URL传递到该事件因为URL经过归一化处理.例如,在URL字符串'www.wingtiptoys公司'可以通过Navigate2,但由于正常化的过程中,该URL参数设置为'HTTP:/ / www.wingtiptoys.共/'.

在Internet Explorer 6或更高版本,该NavigateError事件火灾后在第一个代码导航.当用户点击网页上的链接时,它不会着火.

 

引用文件

 

CWebBrowserEventsImpl.inc