C # Перейти к якорям в элементе управления WebBrowser - PullRequest
9 голосов
/ 18 сентября 2009

У нас есть веб-браузер в нашем приложении Winforms, чтобы красиво отображать историю выбранного элемента, отрисованного с помощью xslt.

xslt записывает теги в выводимый HTML, чтобы позволить элементу управления webBrowser перейти к выбранной записи истории.

Поскольку мы не «переходим» к html в строгом веб-смысле, а устанавливаем html с помощью DocumentText, я не могу «перейти» к нужным якорям с помощью #AnchorName, поскольку URL-адрес веб-браузера является нулевым (edit : на самом деле по завершению речь идет о: blank).

Как в этом случае динамически перейти к тегам привязки в html элемента управления веб-браузера?

EDIT:

Спасибо sdolphion за подсказку, вот код, который я использовал

void _history_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        _completed = true;
        if (!string.IsNullOrEmpty(_requestedAnchor))
        {
            JumpToRequestedAnchor();
            return;
        }
    }

    private void JumpToRequestedAnchor()
    {
        HtmlElementCollection elements = _history.Document.GetElementsByTagName("A");
        foreach (HtmlElement element in elements)
        {
            if (element.GetAttribute("Name") == _requestedAnchor)
            {
                element.ScrollIntoView(true);
                return;
            }
        }
    }

Ответы [ 2 ]

10 голосов
/ 18 сентября 2009

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

HtmlElementCollection elements = this.webBrowser.Document.Body.All;
foreach(HtmlElement element in elements){
   string nameAttribute = element.GetAttribute("Name");
   if(!string.IsNullOrEmpty(nameAttribute) && nameAttribute == section){
      element.ScrollIntoView(true);
      break;
   }
}
5 голосов
/ 18 мая 2015

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

Еще один способ сделать это - использовать идентификатор элемента в HTML.

<p id="section1">This is a test section</p>

Тогда вы можете использовать

HtmlElement sectionAnchor = webBrowserPreview.Document.GetElementById("section1");
if (sectionAnchor != null)
{
    sectionAnchor.ScrollIntoView(true);
}

где webBrowserPreview - это ваш элемент управления WebBrowser.

В качестве альтернативы, sectionAnchor.ScrollIntoView(false) будет только выводить элемент на экран, а не выравнивать его по верху страницы

...