Navigation:  Internet Development > WebBrowser Control > Interfaces > DWebBrowserEvents2 >

NavigateError

Previous pageReturn to chapter overviewNext page

描述

 

导航时发生错误时触发。

 

C++ 语法

 

void NavigateError(     

   IDispatch *pDisp,

   VARIANT *vURL,

   VARIANT *vTargetFrameName,

   VARIANT *vStatusCode,

   VARIANT_BOOL *&bCancel

);

 

PowerBASIC 语法

 

METHOD NavigateError ( _

   BYVAL pDisp AS IDispatch, _

   BYREF vURL AS VARIANT, _

   BYREF vTargetFrameName AS VARIANT, _

   BYREF vStatusCode AS VARIANT, _

   BYREF bCancel AS INTEGER _

)

 

参数

 

pDisp

[in]指向WebBrowser对象的IDispatch接口的指针,该对象表示发生导航错误的窗口或框架。该接口可以查询IWebBrowser2接口。

vURL

[in]指向VARIANT类型VT_BSTR的指向,其中包含导航失败的网址。

vTargetFrameName

[in]指向VT_BSTR类型VT_BSTR的指针,其中包含要显示资源的帧的名称,如果没有为资源指定任何命名框,则为NULL。

vStatusCode

[in]指向VT_I4的指针,其中包含错误状态代码(如果可用)。有关可能的HRESULT和HTTP状态代码的列表,请参阅NavigateError事件状态代码.

bCancel

[in, out]指向VARIANT类型VARIANT_BOOL的指针,指定是否取消导航到错误页面和/或任何其他自动搜索。

VARIANT_FALSE

默认。继续导航到错误页面和/或自动搜索。

VARIANT_TRUE

取消导航到错误页面和/或自动搜索。

 

OBRESULT

 

无返回值。

 

事件DISPID

 

DISPID_NAVIGATEERROR

 

此事件的DISPID在exdispid.inc中定义。在实现IDispatch接口的调用方法时,使用此值来标识事件处理程序。

 

备注

 

由于导航错误,Internet Explorer会显示错误页面之前触发此事件。通过将bCancel参数设置为VARIANT_TRUE,应用程序有机会停止显示错误页面。然而,如果在原始导航器中联系的服务器提供自己的替代页面导航,则将bCancel设置为VARIANT_TRUE将不起作用,导航到服务器的备用页面将继续。例如,假设导航到http://www.www.tip.sys.com/BigSale.htm导致此事件触发,因为页面不存在。但是,服务器设置为重定向到http://www.www.tiptoys.com/home.htm。在这种情况下,将bCancel设置为VARIANT_TRUE没有任何效果,导航将继续进行到http://www.www.tiptoys.com/home.htm。

 

应该使用PDISP参数来匹配此事件及其相应的导航Navigate2请求。例如,多个NavigateError事件可以触发单个导航Navigate2请求。其原因包括导航到具有多个帧的URL或由自动搜索引擎多次尝试来解析无效的URL。在每种情况下,传入这些事件的网址可能与最初请求的网址不一致。但是,这些事件中的每一个都将具有相同的pDisp。

 

与其他事件一样,您可以通过将IDispatch.Invoke实现为事件接收器,并将其连接到WebBrowser控件的DIID_DWebBrowserEvents2连接点来捕获NavigateError事件。然后,您可以从方法的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;

   ...

}

 

传入导航Navigate2的网址可能与传递到此事件的网址不一致,因为网址经过规范化处理。例如,URL字符串“www.wingtiptoys.co”可以传递到Navigate2,但由于标准化过程,URL参数设置为“http://www.wingtiptoys.co/”。

 

在Internet Explorer 6或更高版本中,NavigateError事件只有在代码中进行第一次导航之后才会触发。当用户单击网页上的链接时,它不会触发。