Как заставить CefSharp WinForms управлять прокруткой страницы до ссылки

Итак, вот сценарий использования CefSharp в приложении WinForms. У нас есть две части информации: URL-адрес страницы и URL-адрес ссылки на этой странице. Мы хотим загрузить страницу — это легко сделать, и CefSharp покажет область страницы, где находится ссылка. То есть cefsharp автоматически прокручивается до нужного места на странице, где эта ссылка находится в DOM.

Каков самый простой способ сделать это?


person Dave Gordon    schedule 23.01.2016    source источник


Ответы (1)


Не уверен, какую версию вы используете, я смог решить эту проблему, используя последнюю стабильную версию CefSharp (47.0.0).

Сначала добавьте обработчик события FrameLoadEnd:

browser.FrameLoadEnd += OnBrowserFrameLoadEnd;

Обработчик следующий:

private void OnBrowserFrameLoadEnd(object sender, FrameLoadEndEventArgs frameLoadEndEventArgs)
{
    if (frameLoadEndEventArgs.Frame.IsMain && frameLoadEndEventArgs.Url == pageUrl)
    {
        frameLoadEndEventArgs.Browser.MainFrame.ExecuteJavaScriptAsync(
            "(function() { var el = document.querySelector('a[href=\"" + linkUrl +
            "\"]'); if(el) { el.scrollIntoView(); } })();");
    }
}

Две константы:

private const string pageUrl = "http://stackoverflow.com/";
private const string linkUrl = "http://stackexchange.com/legal";

Всякий раз, когда мы переходим на сайт в pageUrl, мы вызываем функцию JavaScript в загруженном документе. Он выбирает первый элемент с атрибутом href, равным linkUrl, используя querySelector. Если такой элемент есть, то мы вызываем scrollIntoView() метод на нем.

Этот конкретный пример прокручивает следующую ссылку, когда вы посещаете stackoverflow.com.

«Юридическая

Я использовал минимальный пример CefSharp в качестве отправной точки для создания своего POC. Я загрузил его ЗДЕСЬ для проверки.

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

person Szabolcs Dézsi    schedule 24.01.2016