本文实例总结了C#的WEBBROWSER与JS交互的方法。分享给大家供大家参考。具体实现方法如下:
一、实现WebBrowser内部跳转,阻止默认打开IE
1、引用封装好的WebBrowserLinkSelf.dll实现
{
private WebBrowser webBrowser = new WebBrowser();
public MainWindow()
{
InitializeComponent();
this.webBrowser.LoadCompleted += new LoadCompletedEventHandler(webBrowser_LoadCompleted);
//使webbrowser寄宿于Label上,实现webborwser内部跳转,不用IE打开
Label lb = new Label { Content = webBrowser };
WebBrowserHelper webBrowserHelper = new WebBrowserHelper(webBrowser);
HelperRegistery.SetHelperInstance(lb, webBrowserHelper);
webBrowserHelper.NewWindow += WebBrowserOnNewWindow;
this.lbBrowserHost.Content = lb;
// this.webBrowser.Navigate(new Uri("http://www.baidu.com", UriKind.RelativeOrAbsolute));
}
private void WebBrowserOnNewWindow(object sender, CancelEventArgs e)
{
dynamic browser = sender;
dynamic activeElement = browser.Document.activeElement;
var link = activeElement.ToString();
this.webBrowser.Navigate(new Uri(link, UriKind.RelativeOrAbsolute));
e.Cancel = true;
}
}</div>
2、引用com:Microsoft Internet Controls实现(参考MSDN:http://msdn.microsoft.com/en-us/library/system.windows.controls.webbrowser.aspx public partial class MainWindow : Window
public MainWindow()
{
InitializeComponent();
this.webBrowser1.Navigate(new Uri("http://www.baidu.com", UriKind.RelativeOrAbsolute));
this.webBrowser1.LoadCompleted += new LoadCompletedEventHandler(webBrowser1_LoadCompleted);
}
private IServiceProvider serviceProvider;
void webBrowser1_LoadCompleted(object sender, NavigationEventArgs e)
{
if (this.serviceProvider == null)
{
serviceProvider = (IServiceProvider)webBrowser1.Document;
if (serviceProvider != null)
{
Guid serviceGuid = new Guid("0002DF05-0000-0000-C000-000000000046");
Guid iid = typeof(SHDocVw.WebBrowser).GUID;
var webBrowserPtr = (SHDocVw.WebBrowser)serviceProvider
.QueryService(ref serviceGuid, ref iid);
if (webBrowserPtr != null)
{
webBrowserPtr.NewWindow2 += webBrowser1_NewWindow2;
}
}
}
}
private void webBrowser1_NewWindow2(ref object ppDisp, ref bool Cancel)
{
dynamic browser = this.webBrowser1;
dynamic activeElement = browser.Document.activeElement;
var link = activeElement.ToString();
this.webBrowser1.Navigate(new Uri(link, UriKind.RelativeOrAbsolute));
Cancel = true;
}
[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);
}
}
</em></div>
二、WebBrowser与JS的交互
1、与页面标签的交互