Windows 存储呈现的 WebView html 大小

Windows Store WebView rendered html size

我非常需要 calculate/get 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 页面。

好的,我想出了一个解决方案:

我将这个字符串注入我的 html :

string injectionStyleAndScript = @"html,body {margin: 0;padding: 0;height: 100%;}function getHeight() { var height = document.getElementById('wrapper').offsetHeight; window.external.notify(''+height);}";

也就是说插入到

之前
htmlFragment – this is HTMl that i had to place on my WebView.
htmlFragment = htmlFragment.Insert(htmlFragment.IndexOf("</HEAD>"),injectionStyleAndScript); // Inser the Injection

接下来,要计算 body 内部,我将其包裹起来

查找从和到的索引:

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);
}

我不得不将注入脚本更改为:

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>";