通过在XAML中滚动来检测WebView的高度

3
我真的需要能够计算给定WebView中一个HTML元素的高度。这对我正在构建的项目非常关键。我知道这并不是立即可能的,但如果我能确定WebView上存在滚动条,就可以增加视图的高度直到它消失。
有什么想法吗?或者任何其他的解决方案/建议?我曾尝试使用HTMLAgilityPack(现在已经转移到Metro)将其转换为TextBlock,但HTML过于复杂。

你是否知道你的HTML文件大小事先有多大? - N_A
如果您知道它有多大,为什么不给它固定的大小呢? - N_A
我知道HTML的文件大小、行数等信息。也就是说,在将其绑定到WebView之前,我已经知道了HTML的内容。但是,我没有一个函数来计算渲染后HTML的高度。如果我这样做,本质上就相当于编写了一个完整的HTML渲染引擎,只是为了获取一个高度属性! - roryok
当文档加载完成后,您不能执行一些针对DOM的JavaScript代码来获取body高度吗? - Kieren Johnstone
这是一个XAML应用程序,不是HTML / Javascript应用程序。 - roryok
我是指要获取有关HTML的信息,您需要访问DOM。这是通过HTML中的Javascript完成的,请参见我的下面的答案。 - Kieren Johnstone
2个回答

8
如果您可以控制HTML,请添加以下JavaScript代码:
function getDocHeight() {
    var D = document;
    return Math.max(
        Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
        Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
        Math.max(D.body.clientHeight, D.documentElement.clientHeight)
    );
}

(来自http://james.padolsey.com/javascript/get-document-height-cross-browser/)

调用这个函数而不是alert

window.external.notify(getDocHeight());

然后实现 ScriptNotify 事件: http://msdn.microsoft.com/zh-cn/library/windows/apps/windows.ui.xaml.controls.webview.scriptnotify.aspx

啊,我可以将 JavaScript 插入 HTML 然后触发事件。没想到这个方法。我会尝试一下并回复你。 - roryok
那就是答案。干得好!我现在可以计算并设置Webview的高度了。对于某些非常简单的文档,高度计算出错,但这是一个javascript问题。谢谢! - roryok
@roryok 我也遇到了同样的问题。对于一些简单的HTML来说,高度太大了,但对于其他的HTML则是正确的。 - David Schmidlin

0

这可能是一个不错的解决方案,但设备像素密度仍然存在问题。如果您在 WP 上运行代码,则转换可能会变成这样:

private double PixelsToLogicalPixels(double pixels)
{
     var info=Windows.Graphics.Display.DisplayInformation.GetForCurrentView();
     return pixels / info.RawPixelsPerViewPixel;
}
private double LogicalPixelsToPixels(double pixels)
{
     var info = Windows.Graphics.Display.DisplayInformation.GetForCurrentView();
     return pixels * info.RawPixelsPerViewPixel;
}

这可能是一个不错的解决方案?这是对其他答案的评论吗?那么请将其作为评论,而不是答案。 - Jan Doggen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接