誰も彼らでtarget="_blank"
とのリンクにまともな答えをしなかったため。私はそうしようとします。
まず、なぜこれは機能しませんか?ユーザーがWebブラウザコントロール内のリンクをクリックするとナビゲーションイベントが発生せず、新しいウィンドウイベントが発生するためです。新しいウィンドウイベントでは、新しいウィンドウを中断してデフォルトのウィンドウを開くためにクリックされたURLまたは要素にアクセスすることはできません。あなたのやり方は次のとおりです。
まず、文書の完了イベントで次のコードを追加します。
private void webBrowserControl_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
string tagUpper = "";
foreach (HtmlElement tag in (sender as WebBrowser).Document.All)
{
tagUpper = tag.TagName.ToUpper();
if((tagUpper == "AREA") || (tagUpper == "A"))
{
tag.MouseUp += new HtmlElementEventHandler(this.link_MouseUp);
}
}
}
これは、すべてのhtml要素タグを通過し、そこに定義したすべてのタグをif文で検索します。私の場合は、AREAタグも必要でした。あなたはあなたが望む任意のタグをキャッチすることができます。次に、その要素にクリックイベントをアタッチします。
次に、このコードを使用してイベント自体を作成します。
void link_MouseUp(object sender, HtmlElementEventArgs e)
{
Regex pattern = new Regex("href=\\\"(.+?)\\\"");
Match match = pattern.Match((sender as HtmlElement).OuterHtml);
string link = match.Groups[1].Value;
Process.Start(link);
}
このコードでは、正規表現パターン、あなたは非常に可能性の高い独自のニーズために、このパターンを変更する必要がありますを確立します。私はここにブレークポイントを追加し、あなたの正規表現がどのように見える必要があるのかを見ることをお勧めします。正規表現はregex linkでテストできます。グループ化にかっこを使用してください。私は貪欲にマッチしないように疑問符を使用することもお勧めします。そのパターンにマッチして、マッチのグループからのURLを取得します。その後、単にそのURLでプロセスを開始するケースです。これにより、既定のブラウザが開きます。既定のブラウザが既に開いている場合は、新しいタブを追加します。
最後に行う必要があるのは、リンクのデフォルトロジックをキャンセルすることです。これはNewWindowイベントで次のコードで行います。
private void webBrowserControl_NewWindow(object sender, CancelEventArgs e)
{
e.Cancel = true;
}
ウェブブラウザ内のすべてのリンクを 'target =" _ blank "'にするとどうなりますか? – Tombatron
@Tombatron私はちょうどこの質問に新しい答えを掲載しました、それを参照してください。 – Gaugeforever