Как смоделировать «открыть ссылку в новом окне» на C # WebBrowser? - PullRequest
3 голосов
/ 06 августа 2010

Я только что узнал, что для имитации клика я могу позвонить element.InvokeMember("click");, где element - это HtmlElement. Но на самом деле мне нужно открыть ссылку в новом окне, но не в браузере по умолчанию, а в другом WebBrowser, который я бы создал в своей программе. Иногда это работает просто для получения атрибута href, вызывая element.GetAttribute("href");, а затем просто переходя к возвращенному URL, но некоторые требовательные веб-страницы не будут работать таким образом, я предполагаю, что что-то связано с файлами cookie и сессиями.

Ответы [ 2 ]

1 голос
/ 06 августа 2010

System.Windows.Forms.WebBrowser - очень уродливый элемент управления и одна из его самых больших проблем - поддержка мульти-табуляции.Он вообще его не поддерживает.

Я потратил кучу времени, чтобы попытаться заставить его работать должным образом, но не добился достаточного успеха, поэтому рекомендую вместо этого попробовать сторонний контроль.

Обход проблемы:подписаться на событие click каждого <a> на странице (или некоторых из них вам нужно) и создать новые окна вручную.Например, посмотрите, как это реализовано в dotBrowser: 1 2

foreach (HtmlElement tag in webBrowser.Document.All)
{
    tag.Id = String.Empty;
    switch (tag.TagName.ToUpper())
    {
        case "A":
        {
            tag.MouseUp += new HtmlElementEventHandler(link_MouseUp);
            break;
        }
    }
}

private void link_MouseUp(object sender, HtmlElementEventArgs e)
{
    mshtml.HTMLAnchorElementClass a = (mshtml.HTMLAnchorElementClass)((HtmlElement)sender).DomElement;
    switch (e.MouseButtonsPressed)
    {
        case MouseButtons.Left:
        {
            // open new tab
            break;
        }
        case MouseButtons.Right:
        {
            // open context menu
            break;
        }
    }
}
0 голосов
/ 10 августа 2010

Просто обработайте событие NewWindow2, создайте форму / вкладку с веб-браузером и используйте веб-браузер в качестве цели нового запроса окна. Проверьте http://www.codeproject.com/KB/cpp/ExtendedWebBrowser.aspx для примера.

...