Как получить и установить положения полосы прокрутки TChromium?

Как получить и установить TChromium позиции полосы прокрутки в Delphi?

3 ответа

С объектами javascript можно работать напрямую. Просто используйте CefV8Context из кадра.

Вот пример:

var
    val: ICefV8Value;
    context: ICefv8Context;
    excp: ICefV8Exception;
    scroll: TPoint;
begin
    if (Chromium1.Browser.MainFrame = nil) then
      exit;

    //this will work only with exact frame
    context := Chromium1.Browser.MainFrame.GetV8Context;

    if (context <> nil) then
    begin
        context.Eval('window.pageXOffset', val, excp);
        scroll.x := val.GetIntValue;
        context.Eval('window.pageYOffset', val, excp);
        scroll.y := val.GetIntValue;
    end
    else
      exit;

    //todo: do something with scroll here
end;

В настоящее время играю с CefSharp, я думаю, что это похоже на Delphi. Вот мое решение:

public int GetVerticalScrollPosition()
{
    var r = _webView.EvaluateScript(@"document.body.scrollTop");
    return Convert.ToInt32(r);
}

public void SetVerticalScrollPosition(int pos)
{
    _webView.ExecuteScript(
        string.Format(@"document.body.scrollTop = {0}", pos));
}

Я больше не эксперт по Delphi, надеюсь, вы понимаете мой код; в основном я использую JavaScript для чтения / записи позиций прокрутки и выполнения этих небольших фрагментов JavaScript через EvaluateScript а также ExecuteScript методы.

Вам нужно использовать JavaScript в TCromium.Browser. Это самый простой способ:

Chromium1.Browser.MainFrame.ExecuteJavaScript('window.scrollBy(0,50)', 'about:blank', 0);

Удачи!

Другие вопросы по тегам