Monday, January 24, 2005

 

Some notes on IE Error Codes

1.
By 蒋晟
From http://blog.joycode.com/jiangsheng/archive/2005/04/08/47320.aspx

IE6.0之前的版本浏览器控件没有获得HTTP状态代码的接口。一个很依赖于网站设置的方法是,捕获TitleChange事件,在页面标题包含"找不到页面"或者"Page Not Found"之类的字符串时,认为浏览失败。使用这种方法基本只对特定语言的网站有效,也可能受在浏览时使用的代理服务器影响而造成判断不准确。另一个方法是假定短时间内两次连接的结果相同,通过捕获浏览器的BeforeNavigate2事件,在事件处理代码中用winhttp api单独和服务器连接来测试服务器的回应。连接之后可以使用HttpQueryInfo来查询信息,相应参数是HTTP_QUERY_STATUS_CODE。在这之前,可能要在打开URL时用INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS标志来防止服务器的重定向。这种方法会造成每个页面被下载两次,一次由手动测试连接代码发起,一次由浏览器控件发起。根据网络和服务器的状况,两次下载也可能有不同的结果,所以这种方法也未必准确。

IE6.0版本的浏览器控件可以触发DWebBrowserEvents2::NavigateError事件来通知浏览错误及提供错误代码。但是,这个事件只在使用代码触发了浏览错误之后触发一次。在用户点击链接触发浏览错误时不会触发这个事件。

HTML文档对象不支持使用IBindStatusCallback接口自定义URL Moniker绑定过程,因此获得IWinInetHttpInfo接口之后查询信息的方法不能用。InternetGetLastResponseInfo在浏览失败时可能仍然成功,因为服务器可能自定义访问错误的页面。

参考

http://www.microsoft.com/mind/0796/protocol/protocol.asp

DWebBrowserEvents2::NavigateError

http://www.microsoft.com/mind/0396/sweeper/sweeper.asp

http://www.microsoft.com/mind/1096/activex/activex.asp

http://msdn.microsoft.com/workshop/networking/moniker/overview/overview.asp



<< Home

This page is powered by Blogger. Isn't yours?