WebBrowser クラスでクリックされたアンカーの URL を取得する

10 行でズバリ !! 簡単 WebBrowser の作成 (C#) 等で紹介されている WebBrowser クラス を使うと簡単にブラウザを作ることが出来ます。会社の業務で特殊な要件があり、「クリックされたアンカーの URL を取得するにはどうしたら良いか?」を調べていたら、C#トリビアルメモ2 (Webbrowserのリンクをクリックしたら既定のブラウザで開くようにする) に実装が書かれていたのでメモしておきます(若干、改変させて頂きました)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
  this.webBrowser1.Document.Click += new HtmlElementEventHandler(Document_Click);
}

private void Document_Click(object sender, HtmlElementEventArgs e)
{
  HtmlElement clickedElement = webBrowser1.Document.GetElementFromPoint(e.MousePosition);
  string text = null;
  string link = null;
  if (clickedElement.TagName == "a" || clickedElement.TagName == "A")
  {
    text = clickedElement.OuterText;
    link = clickedElement.GetAttribute("href");
  }
  else if (clickedElement.Parent != null)
  {
    if (clickedElement.Parent.TagName == "a" || clickedElement.Parent.TagName == "A")
    {
      text = clickedElement.Parent.OuterText;
      link = clickedElement.Parent.GetAttribute("href");
    }
  }

  if (link != null && link != "")
  {
    try
    {
      MessageBox.Show(text + "\n" + link);
      e.ReturnValue = false;
    }
    catch
    {
    }
  }
}

後半部分で "e.ReturnValue = false;" しているのは、URL だけ拾って実際のページ遷移はさせない為です。素直にページ遷移させるには、この部分を削除します。