描述
在导航过程中发生错误时引发火灾.
语法
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]指向VARIANT型VT_BSTR包含URL,导航失败. |
vTargetFrameName |
[in]指向VARIANT型VT_BSTR包含框架中的资源是要显示的名称,或NULL如果没有命名的框架是针对资源. |
vStatusCode |
[in]指向VT_I4含有错误的状态码,如果有.一系列可能的HRESULT和HTTP状态码,看NavigateError Event Status Codes. |
pbCancel |
[in, out]指向VARIANT型VARIANT_BOOL指定是否取消导航到错误的网页和/或任何进一步的自动搜索. VARIANT_FALSE 违约.继续导航到错误的网页和/或自动搜索. VARIANT_TRUE 取消导航到错误的网页和/或自动搜索. |
返回值
无返回值.
DISPID 事件
DISPID_NAVIGATEERROR
此事件的DISPID定义在exdispid.inc.使用此值来确定事件处理程序时,执行的IDispatch接口Invoke method.
备注
此事件在Internet Explorer由于导航错误而显示错误页之前引发.一个应用程序有机会通过设置bCancel参数VARIANT_TRUE停止错误页面显示.然而,如果在原导航联系服务器提供了自己的替代页面导航,设置bCancel到VARIANT_TRUE将没有效果,导航到服务器的备用页将继续.例如,假设一个导航http://www.www.wingtiptoys.com/bigsale.htm因为网页不存在原因事件.然而,服务器将您重定向到http://www.www.wingtiptoys.com/home.htm相反.在这种情况下,设置bCancel到VARIANT_TRUE没有影响导航将继续http://www.www.wingtiptoys.com/home.htm.
的pDisp参数应用于匹配这一事件与相应的Navigate或Navigate2请求.例如,多NavigateError事件可以火一Navigate或Navigate2请求.出现这种现象的原因包括一个自动搜索引擎与多个帧或多尝试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进入Navigate或Navigate2可能不匹配的URL传递到该事件因为URL经过归一化处理.例如,在URL字符串'www.wingtiptoys公司'可以通过Navigate2,但由于正常化的过程中,该URL参数设置为'HTTP:/ / www.wingtiptoys.共/'.
在Internet Explorer 6或更高版本,该NavigateError事件火灾后在第一个代码导航.当用户点击网页上的链接时,它不会着火.
引用文件
CWebBrowserEventsImpl.inc