正在覆盖webBrowser单击事件

本文关键字:单击 事件 webBrowser 覆盖 | 更新日期: 2023-09-27 18:28:25

我需要一些关于用户单击webBrowser控件中的超链接时会发生什么的信息。我的想法是它调用.Navigate()方法,但我不确定。

我已经创建了一个包装器方法,它包装导航方法。我想做的是,当用户单击链接、按钮或watever时,会调用我的方法,而不是.Navigate()方法。

我需要什么来实现这一点?

感谢

编辑:理解我的问题似乎有一些困难,让我试着重新定义:

我已经创建了自己的webBrowser控件,该控件继承自webBrowser。在我的控件中,有一个我用来导航的方法,它在实际调用navigation()方法之前执行一些步骤。

现在从我的代码中调用这个方法很容易,只需调用我的方法而不是.Navigate。但我想要的是,当用户单击页面上的链接时,我的方法会运行,而不是.NNavigate。

正在覆盖webBrowser单击事件

无需重写,只需在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");        
}

Navigation事件被引发。您可以为它实现一个事件处理程序来拒绝和重定向导航请求:

    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");
        }
    }

如果我理解正确,那么你走错了路。

只需查看超链接的HTML代码。如果它是一个简单的链接,那么它只会转到"导航"。如果有一些脚本函数调用,那么您可以看到该函数的作用。

尝试通过Jquery 执行

$('a').click(function(e){
    e.preventDefault();
    __doPostBack('functionForClick','');
});

不过我还没试过。

当链接指向另一个窗口时,您正在仔细查看事件。

假设链接的target="_new",在这种情况下,导航事件永远不会触发,因为它是一个新的webBrowser,实际打开了url。