今天要用winform做一個網頁瀏覽器,要是只開啟一個視窗,代碼非常簡單,要是像開啟百度,163這些的,都不用寫代碼,直接在Url中設定就行。可是開啟視窗後點擊裡面的連結,就會跳轉到IE中開啟,覺得很不友好。參考了一下網上的代碼,改了下自己的,基本實現了在內部開啟。
代碼如下:
private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
{
this.webBrowser1.ScriptErrorsSuppressed = true; //禁止彈出指令碼錯誤
e.Cancel = true; //禁止在新視窗中開啟
webBrowser1.Navigate(webBrowser1.StatusText); //跳轉到新網頁
}
這幾句簡單的代碼可以實現絕大多數的網頁在內部開啟,但有少部分,因為代碼的特殊性不能開啟。我們要進行如下加工處理:
我們先寫一個方法:
private void SetAllWebItemSelf(HtmlElementCollection items)
{
try
{
foreach (HtmlElement item in items)
{
if (item.TagName.ToLower().Equals("iframe", StringComparison.OrdinalIgnoreCase)==false)
{
try
{
item.SetAttribute("target", "_self");
}
catch
{ }
}
else
{
try
{
HtmlElementCollection fitems = item.Document.Window.Frames[item.Name].Document.All;
this.SetAllWebItemSelf(fitems);
}
catch
{ }
}
}
}
catch
{
}
}
在DocumentCompleted中調用以上方法可以解決以上問題:
代碼:
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
this.webBrowser1.ScriptErrorsSuppressed = false;
this.SetAllWebItemSelf(this.webBrowser1.Document.All);
}