如何使 CefSharp WinForms 控件滚动页面到 Link

How to make CefSharp WinForms control Scroll page to Link

这是在 WinForms 应用程序中使用 CefSharp 的场景。 我们有两条信息,一个页面 url 和该页面中的 link url。 我们想要加载页面 - 轻松完成,并让 CefSharp 显示 link 所在的页面区域。也就是说,cefsharp 会自动滚动到页面上 link 在 DOM.

内的正确位置

最简单的方法是什么?

不确定您使用的是哪个版本,我使用 CefSharp (47.0.0) 的 latest stable version 解决了这个问题。

首先向 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://whosebug.com/";
private const string linkUrl = "http://stackexchange.com/legal";

每当我们导航到 pageUrl 中的站点时,我们都会在加载的文档中调用一个 JavaScript 函数。它使用 querySelector. If there is an element like that, then we invoke the scrollIntoView() 方法选择第一个 href 属性等于 linkUrl 的元素。

此特定示例在您访问 whosebug.com 时将以下 link 滚动到视图中。

我使用 CefSharp Minimal Example 作为构建我的 POC 的起点。 我上传它 HERE 以供检查。

重建项目,启用包恢复,所以它应该得到所有必要的包。之后你可以 运行 它。在地址栏中输入 whosebug.com,按 Enter,加载后,视图应向下滚动。