获取WebBrowser控件的正确页面高度

本文关键字:高度 WebBrowser 控件 获取 | 更新日期: 2023-09-27 18:26:54

我需要WebBrowser控件的正确的页面高度。

在Javascript中,这是有效的:

var body = document.body;
var html = document.documentElement;
var height = Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );

SO上存在重复问题,建议使用以下方法:

webBrowser.Document.Body.ScrollRectangle.Height;     
webBrowser.Document.GetElementsByTagName("body")[0].OffsetRectangle.Bottom;
webBrowser.Document.GetElementsByTagName("body")[0].OffsetRectangle.Height;

除了没有一个返回与JS代码相同的值。

我对JS值错误的可能性持开放态度,但我相当确信它是正确的,因为滚动到页面底部并将ScrollTop位置添加到控件height会产生相同的值。

webBrowser1.Document.GetElementsByTagName("HTML")[0].ScrollTop + webBrowser1.Height; 

对于我的特殊情况,C#返回510的高度,而JS返回529的正确高度。这种不一致性使我编写的自定义滚动条脱落。

获取WebBrowser控件的正确页面高度

如果您有权访问页面的代码,那么您可以将问题中的Javascript添加到该页面,然后从Webbrowser调用它并检索结果。

HTML

<html>
<head>
<script>
function GetPageHeight()
{
    var body = document.body;
    var html = document.documentElement;
    var height = Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );
    return height;
}
</script>
</head>
<body>
Test
</body>
</html>

C#

int height = (int)webBrowser1.Document.InvokeScript("GetPageHeight");