C# WebBrowser中屏蔽快顯視窗及指令碼錯誤提示

來源:互聯網
上載者:User
一、屏蔽指令碼錯誤提示 當IE瀏覽器遇到指令碼錯誤時瀏覽器,左下角會出現一個黃色表徵圖,點擊可以查看指令碼錯誤的詳細資料,並不會有彈出的錯誤資訊框。當我們使用WebBrowser控制項時有錯誤資訊框彈出,這樣程式顯的很不友好,而且會讓一些自動執行的程式暫停。我看到有人採取的解決方案是做一個表單殺手程式來關閉彈出的表單。今天探討的方法是從控制項解決問題。 

1、SHDocVw.dll 

在COM時代我們使用的WebBrowser控制項是SHDocVw.dll。屏蔽錯誤資訊的方法很簡單使用下面的一句就可以搞定。 

WebBrowser1.Silent = true;

2、.Net中 

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

這個組件給我們提供了一個方法ScriptErrorsSuppressed 。但是在.net framework2.0中他是不起作用的,據說在低版本中使用如下的方式解決

webBrowser1.ScriptErrorsSuppressed = true;

(據說在.net framework2.0以前是這樣,我沒有使用過) 

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

有一種方法不能徹底解決,可以部分解決問題這裡也介紹給大家。 
//捕獲控制項的錯誤
this.WebBrowser.Document.Window.Error += new HtmlElementErrorEventHandler(Window_Error);
//對錯誤進行處理
void Window_Error(object sender, HtmlElementErrorEventArgs e)
{
     // 自己的處理代碼
    e.Handled = true;
}

3、上面的方法對於多個架構嵌套等等的情形還是不能很好的解決。 

為了徹底解決這個問題,我們藉助AxWebBrowser來解決WebBrowser的問題。 

我們定義一個自己的類,他的父類是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();
    }
}

 

 

//項目中添加Micrsoft.mshtml引用
using mshtml;

private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
    IHTMLDocument2 vDocument = (IHTMLDocument2)webBrowser1.Document.DomDocument;
    vDocument.parentWindow.execScript(
        "function alert(str){if(str=='zswang')confirm(str);}", "javaScript");
}

//frame結構

private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
    IHTMLDocument2 vDocument = (IHTMLDocument2)webBrowser1.Document.DomDocument;
    foreach (IHTMLElement vElement in vDocument.all)
        if (vElement.tagName.ToUpper() == "FRAME")
        {
            IHTMLFrameBase2 vFrameBase2 = vElement as IHTMLFrameBase2;
            vFrameBase2.contentWindow.execScript(
                "function alert(str){confirm('[' + str + ']');}", "javaScript");
        }
}

二、屏蔽其它視窗

            (wb.ActiveXInstance as SHDocVw.WebBrowser).NavigateComplete2 += new DWebBrowserEvents2_NavigateComplete2EventHandler(wb_NavigateComplete2);//wb是一個Webbrowser控制項

        //屏蔽一些快顯視窗
        void wb_NavigateComplete2(object pDisp, ref object URL)
        {
            mshtml.IHTMLDocument2 doc = (wb.ActiveXInstance as SHDocVw.WebBrowser).Document as mshtml.IHTMLDocument2;
            doc.parentWindow.execScript("window.alert=null", "javascript");
            doc.parentWindow.execScript("window.confirm=null", "javascript");
            doc.parentWindow.execScript("window.open=null", "javascript");
            doc.parentWindow.execScript("window.showModalDialog=null", "javascript");
            doc.parentWindow.execScript("window.close=null", "javascript");

三、自動確定彈出對話方塊

Q:winform中如何?自動點擊webbrowser彈出對話方塊中的確定按鈕

A:

//using mshtml;
        //using SHDocVw;
        private void Form1_Load(object sender, EventArgs e)
        {
            this.webBrowser1.Navigate("http://localhost:28512/WebSite2/Default.aspx");
            SHDocVw.WebBrowser wb = this.webBrowser1.ActiveXInstance as SHDocVw.WebBrowser;
            wb.NavigateComplete2 += new SHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(wb_NavigateComplete2);
             
        }

        void wb_NavigateComplete2(object pDisp, ref object URL)
        {
            mshtml.IHTMLDocument2 doc = (this.webBrowser1.ActiveXInstance as SHDocVw.WebBrowser).Document as mshtml.IHTMLDocument2;
            doc.parentWindow.execScript("function alert(str){return ''}", "javascript");
        }

 

 

 

轉自:http://www.cnblogs.com/oldsea/archive/2009/07/31/1536252.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.