2016-01-23 133 views
2

因此,这里是在WinForms应用程序中使用CefSharp的场景。 我们在页面中有两个信息页面url和链接url。 我们想要加载页面 - 轻松完成,并让CefSharp显示链接所在页面的区域。这是cefsharp自动滚动到页面上该链接位于DOM内的正确位置。如何制作CefSharp WinForms控件将页面滚动到链接

这样做最简单的方法是什么?

回答

5

不知道您使用的是哪个版本,我可以使用CefSharp的latest stable version(47.0.0)来解决此问题。

首先添加处理程序到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的网站中,我们在l中调用JavaScript函数提交文件。它使用querySelector选择具有href属性等于linkUrl的第一个元素。如果有这样的元素,那么我们调用其上的方法scrollIntoView()

此特定示例在访问stackoverflow.com时将以下链接滚动到视图中。

Stack Overflow legal link

我用CefSharp Minimal Example为出发点,建立我的POC。 我上传了HERE进行检查。

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