WebBrowser中的腳本錯誤處理
當IE瀏覽器遇到時腳本錯誤,左下角會出現一個黃色圖標,點擊可以查看腳本錯誤的詳細信息,並不會有彈出的錯誤信息框。但是WebBrowser控件則沒有這麼聰明,它會彈出錯誤信息框,使得程序顯的很不友好,而且會讓一些自動執行的程序暫停。雖然WebBrowser提供了ScriptErrorsSuppressed屬性,經過嘗試,結果是令人遺憾的,通過設置該屬性可以解決部分問題,但不能徹底解決。在此探討兩種解決方案:一是通過截獲WebBrowser.Document.Window.Error事件,並阻止WebBrowser繼續處理錯誤來解決。如下:
//註冊捕獲控件的錯誤的處理事件
this.WebBrowser.Document.Window.Error +=
new HtmlElementErrorEventHandler(Window_Error);
//對錯誤進行處理
void Window_Error(object sender, HtmlElementErrorEventArgs e)
{
e.Handled = true; // 阻止其他地方繼續處理
}
上面的方法可以解決大部分問題,但對於多個框架嵌套等等的情形還是不能很好的解決,於是只能自己動手封裝一個MyWebBrowser了,然後用我們自己的MyWebBrowser來替代WebBrowser。如下:
public class MyWebBrowser : System.Windows.Forms.WebBrowser
{
private SHDocVw.IWebBrowser2 Iwb2;
protected override void AttachInterfaces(object nativeActiveXObject)
{
Iwb2 = (SHDocVw.IWebBrowser2) nativeActiveXObject;
Iwb2.Silent = true;
base.AttachInterfaces(nativeActiveXObject);
}
protected override void DetachInterfaces()
{
Iwb2 = null;
base.DetachInterfaces();
}
}
這種方法能能很好的解決問題,其實使用過非託管WebBrowser的朋友肯定看出來了,實際上是通過引用SHDocVw繞過託管代碼,直接SHDocVw.IWebBrowser2.Silent = true,最原始的也是最有效的。
==================以上網上原話
轉:http://blog.csdn.net/freeliver54/archive/2009/03/26/4610788.aspx