- 2007-09-24 (月) 22:22
- C#
最近WordPressの管理画面がばぐってる。微妙にいじったからかな・・・。
そういうわけでタイトルの通りです。
要は、Webbrowser上でクリックされたリンク先URLをどうやってとるかという話です。
まずはWebbrowser.Documentにリスナーを登録します。Webbrowserそのものに登録してもだめ。
webBrowser1.Document.Click += new HtmlElementEventHandler(Document_Click);
リスナーの中身です。
void Document_Click(object sender, HtmlElementEventArgs e)
{
HtmlElement clickedElement = webBrowser1.Document.GetElementFromPoint(e.MousePosition);
string link = null;
if (clickedElement.TagName == "a" || clickedElement.TagName == "A")
{
link = clickedElement.GetAttribute("href");
}
else if (clickedElement.Parent != null)
{
if (clickedElement.Parent.TagName == "a" || clickedElement.Parent.TagName == "A")
{
link = clickedElement.Parent.GetAttribute("href");
}
}
if (link != null && link != "")
{
try
{
System.Diagnostics.Process.Start(link);
}
catch
{
}
}
}
HtmlElementEventArgs にToElementとかFromElementありますが、今回の場合どうもnullみたいで、取れているのはxy座標だけ。
そういうわけでGetElementFromPoint()をつかってHtmlElementを取得します。
で、TagNameで要素を判断してるんですが、デバッガで見てみるとなぜか大文字になっていました。まあ、念のためどっちもみとく。
他にいい方法あるのかもしれませんが、まあ、しらんし。
imgタグをaタグで囲っているときとかもあると思うので、一応親要素までチェック。まじめにやるなら親がnullかなんかになるまでループで探索するのが良いと思われる。
晴れてhref属性が取れた暁にはProcess.Start(link)で既定ブラウザを起動。
以上
関連記事
- Newer: C#トリビアルメモ3 (Webbrowserで文字列を読み込む)
- Older: C#トリビアルメモ1 (正規表現で置換)
Comments:1
- Ohagi3rd@Yahoo 13-06-12 (水) 3:47
-
クリックした要素を取得する方法を探していたら、ここに辿り着き参考にさせていただきました。
情報ありがとうございます。
環境により正しく動くのかもしれませんが、C#2010(.NET4.0)ではクリックした位置が
e.MousePositionではダメなようでした。e.ClientMousePositionで正しく動きました。
ご報告まで。
Trackbacks:0
- Trackback URL for this entry
- http://red-treasure.com/report/wp-trackback.php?p=100
- Listed below are links to weblogs that reference
- C#トリビアルメモ2 (Webbrowserのリンクをクリックしたら既定のブラウザで開くようにする) from コスミー報告書[社外秘]