这是在 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
选择具有等于 linkUrl
的 href
属性的第一个元素。如果存在这样的元素,那么我们将对其调用 scrollIntoView()
方法。
当您访问 stackoverflow.com 时,此特定示例会将以下链接滚动到 View 中。
我使用 CefSharp Minimal Example 作为构建我的 POC 的起点。 我上传它 HERE 以供检查。
重建项目,启用包恢复,所以它应该得到所有必要的包。之后你可以运行它。在地址栏中输入 stackoverflow.com,按 Enter,加载后, View 应向下滚动。
关于c# - 如何使 CefSharp WinForms 控件滚动页面到链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34970190/