2012-10-04 17 views
2

我真的需要能够计算出给定的WebView中的HTML片段的高度。这对我正在尝试构建的项目非常重要。我知道这不是立即可能的,但我可以确定WebView上是否存在滚动条,我可能会增加视图的高度直到它消失。通过在XAML中滚动检测WebView高度

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

+0

您是否碰巧知道您的html会提前多久? – mydogisbox

+0

是的。这是HTML电子邮件 – roryok

+0

如果你知道它有多大,为什么不给它一个固定的大小? – mydogisbox

回答

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

+0

下面啊,所以我可以在javascript中插入javascript,然后触发一个事件。没想到这一点。我会试试看,并回复给你 – roryok

+0

这就是答案。优秀作品!我现在可以计算并设置Webview的高度。对于某些非常简单的文档,高度出错了,但这是一个JavaScript问题。谢谢! – roryok

+0

@ roryok我遇到了同样的问题。对于一些简单的html,高度是很好的,但对其他人来说是正确的。 –

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; 
} 
+0

*这可能是一个很好的解决方案?这是对其他答案的评论吗?然后让它成为评论,而不是回答。 –