Как получить и установить положения полосы прокрутки 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);
Удачи!