c# - 如何使 CefSharp WinForms 控件滚动页面到链接

标签 c# html winforms dom cefsharp

这是在 WinForms 应用程序中使用 CefSharp 的场景。 我们有两条信息,一个页面 url 和该页面中的一个链接 url。 我们想要加载页面 - 轻松完成,并让 CefSharp 显示链接所在的页面区域。也就是说,cefsharp 会自动滚动到页面上该链接位于 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://stackoverflow.com/";
private const string linkUrl = "http://stackexchange.com/legal";

每当我们导航到 pageUrl 中的站点时,我们都会在加载的文档中调用一个 JavaScript 函数。它使用 querySelector 选择具有等于 linkUrlhref 属性的第一个元素。如果存在这样的元素,那么我们将对其调用 scrollIntoView() 方法。

当您访问 stackoverflow.com 时,此特定示例会将以下链接滚动到 View 中。

Stack Overflow legal link

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

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

关于c# - 如何使 CefSharp WinForms 控件滚动页面到链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34970190/

相关文章:

c# - 如何实时刷新WPF Toolkit ColumnSeries Chart

c# - 如何在 Node.js 中解压一个 c# 打包的结构

c# - 将分钟转换为全职 C#

c# - 按钮 Onclick 事件(在 codbehind 中)不会在 MVC 2 中触发

javascript - 将一些 Javascript 放在单独的文件中?

html - flex 盒列内的 flex 盒行

html - Chrome body 和 html 高度默认为 100%

c# - 属性网格 > 如何刷新主属性

c# - Control.PerformClick() 没有做任何事情,我错过了什么?

.net - 将 ComboBox 绑定(bind)到 IList 并使用 SelectedValue