WebBrowser腳本錯誤的完美解決方案
當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
;
}
上面的方法對於多個框架嵌套等等的情形還是不能很好的解決。
為了徹底解決這個問題,我們借助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();
}
}
從上面的代碼可以看出EWebBrowser截取了AxWebBrowser接口,並利用了AxWebBrowser的屬性Silent來實現。
|