我非常需要在WebView中计算/获取渲染的html大小。
有没有办法实现这个目标?
在Objective-C中,我可以将HTML字符串传递给WebView并提供可用的大小,并返回所需的大小。
Windows Store WebView中是否存在与此类似的内容?
例如:
WebView webView = new WebView();
webView.NavigateToString(html);
webView.ContentLoaded+= webView_ContentLoaded(,);
webView_ContentLoaded(,)
{
//Height=99999999 - does the trick, like available height is infinite
//Width=200 - means that width is limited to 200px
Size desiredSize = webView.Content.Measure(new Size{Height=99999999, Width=200}());
}
根据desiredSize值,我可以调整WebView的大小以防止在WebView中滚动,并将所有内容放在XAML页面上。
答案 0 :(得分:3)
好的,我想出了一个解决方案:
我把这个字符串注入了我的html:
string injectionStyleAndScript = @“html,body {margin:0; padding:0; height:100%;} function getHeight(){var height = document.getElementById('wrapper')。offsetHeight; window.external.notify ( '' +高度);}“;
这意味着在
之前插入它htmlFragment – this is HTMl that i had to place on my WebView.
htmlFragment = htmlFragment.Insert(htmlFragment.IndexOf("</HEAD>"),injectionStyleAndScript); // Inser the Injection
接下来,为了计算身体内部,我将它包裹起来
从以下位置查找索引:
int from = htmlFragment.IndexOf("<BODY>")+6;
int to = htmlFragment.IndexOf("</BODY>");
接下来包装内的所有内容。
string bodyWrapper = string.Format("<div id='wrapper'>{0}</div>", htmlFragment.Substring(from, (htmlFragment.Length - 1 - from)-(htmlFragment.Length - 1 - to)));
接下来,将旧内容替换为新内容(我们在包装器中创建):
//Cut out the old one
htmlFragment = htmlFragment.Remove(from, (htmlFragment.Length - 1 - from) - (htmlFragment.Length - 1 - to));
//Insert our wrapper
htmlFragment = htmlFragment.Insert(from, bodyWrapper);
//Navigate to the HTML
MyWebView.NavigateToString(htmlFragment);
接下来我们需要将2个事件附加到WebView - DOMContentLoaded和ScriptNotify:
MyWebView.ScriptNotify += MyWebView;
MyWebView.DOMContentLoaded += MyWebView;
MyWebView.NavigateToString(htmlFragment);
以下是两个事件处理程序:
void MyWebView_DOMContentLoaded(WebView sender, WebViewDOMContentLoadedEventArgs args)
{
MyWebView.InvokeScriptAsync("getHeight", null);
}
void MyWebView_ScriptNotify(object sender, NotifyEventArgs e)
{
string result = e.Value.ToString();
MyWebView.Height = double.Parse(result);
}
答案 1 :(得分:0)
我必须将注射脚本更改为:
string injectionStyleAndScript = @"<style> html,body {margin: 0;padding: 0;height: 100%;} </style><script type='text/javascript'>function getHeight() { var height = document.getElementById('wrapper').offsetHeight; window.external.notify(''+height);}</script>";