xmal
<UserControl x:Class="Common.UcPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="688" d:DesignWidth="1366" UseLayoutRounding="True">
<Grid>
<DockPanel LastChildFill="False" >
<WebBrowser x:Name="webBrowser" LoadCompleted="WebBrowser_LoadCompleted" />
</DockPanel>
</Grid>
</UserControl>
xmal.cs
/// <summary>
/// UcPage.xaml 的交互逻辑
/// </summary>
public partial class UcPage : UserControl
{
static readonly Guid SID_SWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("6d5140c1-7436-11ce-8034-00aa006009fa")]
internal interface IServiceProvider
{
[return: MarshalAs(UnmanagedType.IUnknown)]
object QueryService(ref Guid guidService, ref Guid riid);
}
public UcPage()
{
InitializeComponent();
string uri = "http://baidu.com/" ;
webBrowser.Navigate(uri);
webBrowser.Navigated += (sender, e) =>
{
SuppressScriptErrors((WebBrowser)sender, true);
};
}
private void WebBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
IServiceProvider serviceProvider = (IServiceProvider)webBrowser.Document;
Guid serviceGuid = SID_SWebBrowserApp;
Guid iid = typeof(SHDocVw.IWebBrowser2).GUID;
SHDocVw.IWebBrowser2 myWebBrowser2 = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid);
SHDocVw.DWebBrowserEvents_Event wbEvents = (SHDocVw.DWebBrowserEvents_Event)myWebBrowser2;
wbEvents.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(OnWebBrowserNewWindow);
}
private void OnWebBrowserNewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers,
ref bool Processed)
{
Processed = true;
webBrowser.Navigate(URL);
}
private void WebBrowserOnNavigated(object sender, NavigationEventArgs e)
{
dynamic browser = sender;
browser.Parent.Header = browser.Document.IHTMLDocument2_title;
}
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 });
}
}