WebBrowser自定义简易浏览器遇到两个问题。
1、IE弹错误提示
2、点击网址总是打开IE新窗口
问题1解决办法:
/// <summary>
/// 解决IE脚本错误
/// </summary>
/// <param name="wb"></param>
/// <param name="Hide"></param>
public void SuppressScriptErrors(WebBrowser wb, bool Hide)
{
FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);
if (fiComWebBrowser == null) return;
object objComWebBrowser = fiComWebBrowser.GetValue(wb);
if (objComWebBrowser == null) return;
objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { Hide });
}
private void webbrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
SuppressScriptErrors(webbrowser, true);
}
问题2解决办法:
添加引用using mshtml;
private void webbrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
HTMLDocumentClass doc = (HTMLDocumentClass)this.webbrowser.Document;
foreach(IHTMLElement link in doc.links)
{
link.setAttribute("target","_self");
}
foreach(IHTMLElement form in doc.forms)
{
form.setAttribute("target", "_self");
}
}
添加如上代码后,程序会报“无法嵌入互操作类型HTMLDocumentClass”的错误。
解决此错误需要:在引用中找到此dll,右键打开属性,将“嵌入互操作类型”改为false。
至此,问题完美解决!