WebBrowser腳本錯誤的完美解決方案

當IE瀏覽器遇到腳本錯誤時瀏覽器,左下角會出現一個黃色圖標,點擊能夠查看腳本錯誤的詳細信息,並不會有彈出的錯誤信息框。當咱們使用WebBrowser控件時有錯誤信息框彈出,這樣程序顯的很不友好,並且會讓一些自動執行的程序暫停。我看到有人採起的解決方案是作一個窗體殺手程序來關閉彈出的窗體。今天探討的方法是從控件解決問題。web


一、SHDocVw.dll 瀏覽器

在COM時代咱們使用的WebBrowser控件是SHDocVw.dll。屏蔽錯誤信息的方法很簡單使用下面的一句就能夠搞定。 
WebBrowser1.Silent = true;
二、.Net中 框架

在.Net中提供了託管的WebBrowser可供咱們使用,固然咱們仍然能夠在.Net中使用COM組建SHDocVw.dll,若是使用SHDocVw.dll
處理錯誤方式和上面的方法同樣。但若是咱們是使用.Net組件如何解決這個問題呢? ide

這個組件給咱們提供了一個方法ScriptErrorsSuppressed 。可是在.net framework2.0中他是不起做用的,聽說在低版本中使用以下的方式解決this

webBrowser1.ScriptErrorsSuppressed = true;
(聽說在.net framework2.0之前是這樣,我沒有使用過) .net

那麼在.net framework2.0中如何解決這個問題呢? orm

有一種方法不能完全解決,能夠部分解決問題這裏也介紹給你們。 
//捕獲控件的錯誤
 this.WebBrowser.Document.Window.Error += new HtmlElementErrorEventHandler(Window_Error);
//對錯誤進行處理
void Window_Error(object sender, HtmlElementErrorEventArgs e)
{
     // 本身的處理代碼
    e.Handled = true;
}blog

三、上面的方法對於多個框架嵌套等等的情形仍是不能很好的解決。 ip

爲了完全解決這個問題,咱們藉助AxWebBrowser來解決WebBrowser的問題。 class

咱們定義一個本身的類,他的父類是WebBrowser,之後使用這個類就能夠了。在這個類的定義中須要引用SHDocVw。 
class EWebBrowser : System.Windows.Forms.WebBrowser
{
    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();    }} --------------------- 做者:jxufewbt 來源:CSDN 原文:https://blog.csdn.net/jxufewbt/article/details/1758405 版權聲明:本文爲博主原創文章,轉載請附上博文連接!

相關文章
相關標籤/搜索