注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

讓WebBrowser可以辨認Navigate Error Http 404 的錯誤(不止404)  

2013-08-07 17:11:59|  分类: C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  1. 為了要讓WEBBROWSER能夠追到網頁的ERROR CODE查了好多資料,都沒結果,好不容易找到了MSDN,卻還是看不懂,不過MSDN的好處是稍稍理解一下,就可以直接剪程式碼來用了,我把程式碼做作CLASS,只要讓WEBBROWSER實做WEBBROWSER2即可。(也是要稍稍動點手腳啦)  
  2.   
  3. 在Form1.designer.cs裡面要改成  
  4. this.xwebbowser = new  WebBrowser2();  
  5.   
  6. 然後手動寫事件發生時要做什麼  
  7. private void wb_NavigateError(object sender, WebBrowserNavigateErrorEventArgs e)  
  8.         {  
  9. console.writeline(e.StatusCode);  
  10.                     }  
  11.   
  12. 這裡要注意的是事件的委派要從『屬性』視窗的『事件』頁面的"其他"裡指定事件  
  13.   
  14. 這樣e.StatusCode就能帶出錯誤碼,EX:找不到頁面的http 404的那個404碼  
  15.   
  16. msdn裡有列錯誤碼所代表的意思  
  17.   
  18. http://msdn.microsoft.com/en-us/library/bb268233(VS.85).aspx  
  19.   
  20.   
  21. CLASS 如下  
  22. using System.Windows.Forms;  
  23. using System.Runtime.InteropServices;  
  24. using System.Security.Permissions;  
  25.   
  26. namespace webHeartBeat_checker  
  27. {  
  28.     //繼承webbrowser  
  29.     public class WebBrowser2 : WebBrowser  
  30.     {  
  31.         AxHost.ConnectionPointCookie cookie;  
  32.         WebBrowser2EventHelper helper;  
  33.   
  34.         [PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]  
  35.         protected override void CreateSink()  
  36.         {  
  37.             base.CreateSink();  
  38.   
  39.             // Create an instance of the client that will handle the event  
  40.             // and associate it with the underlying ActiveX control.  
  41.             helper = new WebBrowser2EventHelper(this);  
  42.             cookie = new AxHost.ConnectionPointCookie(this.ActiveXInstance, helper, typeof(DWebBrowserEvents2));  
  43.         }  
  44.   
  45.         [PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]  
  46.         protected override void DetachSink()  
  47.         {  
  48.             // Disconnect the client that handles the event  
  49.             // from the underlying ActiveX control.  
  50.             if (cookie != null)  
  51.             {  
  52.                 cookie.Disconnect();  
  53.                 cookie = null;  
  54.             }  
  55.             base.DetachSink();  
  56.         }  
  57.   
  58.         //加入一個新的事件  
  59.         public event WebBrowserNavigateErrorEventHandler NavigateError;  
  60.   
  61.         // Raises the NavigateError event.  
  62.         protected virtual void OnNavigateError(WebBrowserNavigateErrorEventArgs e)  
  63.         {  
  64.             if (this.NavigateError != null)  
  65.             {  
  66.                 this.NavigateError(this, e);  
  67.             }  
  68.         }  
  69.   
  70.         // Handles the NavigateError event from the underlying ActiveX    
  71.         // control by raising the NavigateError event defined in this class.  
  72.         private class WebBrowser2EventHelper : StandardOleMarshalObject, DWebBrowserEvents2  
  73.         {  
  74.             private WebBrowser2 parent;  
  75.   
  76.             public WebBrowser2EventHelper(WebBrowser2 parent)  
  77.             {  
  78.                 this.parent = parent;  
  79.             }  
  80.   
  81.             public void NavigateError(object pDisp, ref object url, ref object frame, ref object statusCode, ref bool cancel)  
  82.             {  
  83.                 // Raise the NavigateError event.  
  84.                 this.parent.OnNavigateError(new WebBrowserNavigateErrorEventArgs((String)url, (String)frame, (Int32)statusCode, cancel));  
  85.             }  
  86.         }  
  87.     }  
  88.     // Represents the method that will handle the WebBrowser2.NavigateError event.  
  89.     public delegate void WebBrowserNavigateErrorEventHandler(object sender, WebBrowserNavigateErrorEventArgs e);  
  90.   
  91.     // Provides data for the WebBrowser2.NavigateError event.  
  92.     public class WebBrowserNavigateErrorEventArgs : EventArgs  
  93.     {  
  94.         private String urlValue;  
  95.         private String frameValue;  
  96.         private Int32 statusCodeValue;  
  97.         private Boolean cancelValue;  
  98.   
  99.         public WebBrowserNavigateErrorEventArgs(String url, String frame, Int32 statusCode, Boolean cancel)  
  100.         {  
  101.             urlValue = url;  
  102.             frameValue = frame;  
  103.             statusCodeValue = statusCode;  
  104.             cancelValue = cancel;  
  105.         }  
  106.   
  107.         public String Url  
  108.         {  
  109.             get { return urlValue; }  
  110.             set { urlValue = value; }  
  111.         }  
  112.   
  113.         public String Frame  
  114.         {  
  115.             get { return frameValue; }  
  116.             set { frameValue = value; }  
  117.         }  
  118.   
  119.         public Int32 StatusCode  
  120.         {  
  121.             get { return statusCodeValue; }  
  122.             set { statusCodeValue = value; }  
  123.         }  
  124.   
  125.         public Boolean Cancel  
  126.         {  
  127.             get { return cancelValue; }  
  128.             set { cancelValue = value; }  
  129.         }  
  130.     }  
  131.   
  132.     // Imports the NavigateError method from the OLE DWebBrowserEvents2    
  133.     // interface.    
  134.     [ComImport, Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"),  
  135.     InterfaceType(ComInterfaceType.InterfaceIsIDispatch),  
  136.     TypeLibType(TypeLibTypeFlags.FHidden)]  
  137.     public interface DWebBrowserEvents2  
  138.     {  
  139.         [DispId(271)]  
  140.         void NavigateError(  
  141.             [In, MarshalAs(UnmanagedType.IDispatch)] object pDisp,  
  142.             [In] ref object URL, [In] ref object frame,  
  143.             [In] ref object statusCode, [In, Out] ref bool cancel);  
  144.     }  
  145. }  
WebBrowserExtensibility.rar
  评论这张
 
阅读(480)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017