Потому что никто не сделал достойного ответа на ссылки с target="_blank"
в них. Я попытаюсь сделать это.
Во-первых, почему это не работает? Поскольку, когда пользователь нажимает на ссылку в вашем веб-браузере, она не запускает навигационное событие, оно запускает новое событие окна. В событии нового окна у вас нет доступа к 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 и находит все теги, которые вы определяете там, если заявление. Для моего случая мне также нужны теги AREA. Вы можете поймать любой тег, который вы хотите. Затем мы присоединяем событие click к этому элементу.
Далее мы создаем событие с этим кодом.
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