我需要一些有关用户单击webBrowser控件中的超链接时会发生什么的信息。我的想法是它调用.Navigate()
方法,但我不确定。
我创建了一个包装导航方法的包装器方法。我想要做的是,当用户点击链接或按钮或watever时,我的方法被调用而不是.Navigate()
方法。
我需要做些什么来实现这个目标?
由于
编辑:似乎在理解我的问题时遇到了一些麻烦,让我试着重新思考:
我创建了自己的webBrowser控件,它继承自WebBrowser。在我的控件中,有一个我用来导航的方法,它在实际调用navigate()方法之前执行了一些步骤。
现在从我的代码中调用此方法很简单,只需调用我的方法而不是.Navigate。但我想要的是,当用户点击页面上的链接时,我的方法运行而不是.Navigate。
答案 0 :(得分:5)
无需覆盖,只需将事件处理程序附加到WebBrowser.DocumentCompleted事件上页面上的每个链接。
private bool bCancel = false;
private void webBrowser_DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
int i;
for (i = 0; i < webBrowser.Document.Links.Count; i++)
{
webBrowser.Document.Links[i].Click += new
HtmlElementEventHandler(this.LinkClick);
}
}
private void LinkClick(object sender, System.EventArgs e)
{
bCancel = true;
MessageBox.Show("Link Was Clicked Navigation was Cancelled");
}
private void webBrowser_Navingating(object sender,
WebBrowserNavigatingEventArgs e )
{
if (bCancel == true)
{
e.Cancel=true;
bCancel = false;
}
}
希望它有所帮助!
修改强>
如果您想要查找有关所点击链接的更多信息,只需使用以下内容修改LinkClick事件处理程序:
private void LinkClick(object sender, System.EventArgs e)
{
HtmlElement element = ((HtmlElement)sender);
string id = element.Id;
string href = element.GetAttribute("href");
bCancel = true;
MessageBox.Show("Link Was Clicked Navigation was Cancelled");
}
答案 1 :(得分:4)
引发了导航事件。您可以为它实现一个事件处理程序来拒绝和重定向导航请求:
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) {
// Redirect expertsexchange to stackoverflow
if (e.Url.ToString().Contains("experts-exchange")) {
e.Cancel = true;
webBrowser1.Navigate("http://stackoverflow.com");
}
}
答案 2 :(得分:2)
如果我理解正确的话,那你就走错了路。
只需查看超链接的HTML代码即可。 如果它是一个简单的链接 - 那么它只是去Navigate。 如果有一些脚本函数调用,那么你可以看到函数的作用。
答案 3 :(得分:0)
尝试通过Jquery
进行$('a').click(function(e){
e.preventDefault();
__doPostBack('functionForClick','');
});
虽然没试过。
答案 4 :(得分:0)
当链接定位到另一个窗口时,您正在查看该事件。
假设链接具有target =&#34; _new&#34;,在这种情况下,导航事件永远不会被触发,因为它是一个实际打开URL的新webBrowser。