【问题标题】:How to get and set TChromium scrollbar positions?如何获取和设置 TChromium 滚动条位置?
【发布时间】:2012-12-04 13:02:19
【问题描述】:

如何在 Delphi 中获取和设置TChromium 滚动条位置?

【问题讨论】:

  • 投票重新开放。在我看来,这是一个有效且有用的问题!没有太多要研究的东西(所以也没有太多要展示的东西),因为在 CEF 中获取或设置滚动条位置可能是不可能的。
  • 感谢您的回答,我会尝试其他解决方案。

标签: delphi chromium tchromium chromium-embedded


【解决方案1】:

可以直接使用 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;

【讨论】:

    【解决方案2】:

    目前正在使用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 专家了,希望你能看懂我的代码;基本上是I use JavaScript to read/write the scroll positions 并通过EvaluateScriptExecuteScript 方法执行这些小的JavaScript sn-ps。

    【讨论】:

      【解决方案3】:

      您需要在 TCromium.Browser 中使用 JavaScript。这是最简单的方法:

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

      祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-23
        • 1970-01-01
        • 2011-04-03
        • 2011-05-05
        • 2023-01-10
        • 1970-01-01
        • 2011-01-29
        • 2013-10-16
        相关资源
        最近更新 更多