在 WebBrowser 控件中检测滚动到底部

Posted

技术标签:

【中文标题】在 WebBrowser 控件中检测滚动到底部【英文标题】:Detect scroll to bottom in WebBrowser control 【发布时间】:2017-05-19 14:41:00 【问题描述】:

我正在创建一个 Windows 窗体以接受公司的某些条款和条件。因此,条款和条件在网络上,并通过 WebBrowser 控件导航到 WinForm。只有在整个文档滚动到底部后才需要启用接受按钮。我正在 VScrollBar 控件(如下所述)或任何其他选项中搜索类似于 ValueChanged 事件的事件。

private void vScrollBar1_ValueChanged(object sender, EventArgs e)
    
        if (vScrollBar1.Value+9 == vScrollBar1.Maximum)
        
            acceptBtn.Enabled = true;
        
    

【问题讨论】:

【参考方案1】:

滚动条不是 WebBrowser 控件的一部分,而是显示的 html 的一部分。您必须订阅显示文档的窗口的滚动事件

webBrowser1.Document.Window.Scroll += MyScrollCode;

https://msdn.microsoft.com/en-us/library/system.windows.forms.htmlwindow.scroll(v=vs.110).aspx

【讨论】:

【参考方案2】:

您应该处理window 对象的onscroll 事件并检查scrollHeight - scrollTop 是否等于clientHeightdocumentElement。这样做:

private void webBrowser1_DocumentCompleted(object sender, 
    WebBrowserDocumentCompletedEventArgs e)

    this.webBrowser1.Document.Window.AttachEventHandler("onscroll", OnScroll);


void OnScroll(object sender, EventArgs e)

    var script =
    @"(function()
       
           var e = document.documentElement;
           if (e.scrollHeight - e.scrollTop === e.clientHeight)
               return true;
           else
               return false;
       )();";
    var result = webBrowser1.Document.InvokeScript("eval", new object[]  script );
    if ((bool)result)
        MessageBox.Show("Scrolled to end!");

【讨论】:

以上是关于在 WebBrowser 控件中检测滚动到底部的主要内容,如果未能解决你的问题,请参考以下文章

如何用js控件div的滚动条,让它在内容更新时自动滚到底部?

检测页面滚动到底部

自动滚动面板到底部

WPF中使用WebBrowser控件,怎么自定义它的滚动条样式

c# WebBrowser 控件滚动条

UICollectionView 滚动到底部不显示整个项目