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

时间:2012-10-04 12:13:00

标签: c# xaml webview windows-8 microsoft-metro

我真的需要能够计算出给定WebView内HTML的高度。这对我正在尝试构建的项目至关重要。我知道这不可能立即实现,但我可以确定WebView上是否存在滚动条我可能会增加视图的高度,直到它消失。

对此有何想法?或任何替代解决方案/建议?我考虑使用HTMLAgilityPack(现在为ported to Metro)将其转换为TextBlock,但HTML太复杂了。

2 个答案:

答案 0 :(得分:7)

如果您可以控制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/en-us/library/windows/apps/windows.ui.xaml.controls.webview.scriptnotify.aspx

答案 1 :(得分: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;
}