如何在Windows 8 Metro应用中处理HTML内容

12

我正在设计一个Windows 8 阅读应用程序,必须使用控件来显示从某些网站提取的HTML内容。由于这些HTML内容可能包含图像或其他格式化文本,所以我现在正在使用“richtextblock”来显示HTML内容,但解析HTML内容需要很多时间。

因此,我想知道是否有任何控件可以处理HTML内容,除了WebView?

谢谢。

更新: 我不能使用WebView是因为我需要实现分页,就像下面的图片:

enter image description here


WebView控件有什么问题吗? - JP Alioto
那么你不是使用HTML来开发这个应用程序吗? - louis.luo
3个回答

4

正如JP Alioto提到的,您应该使用WebView控件。

您可以使用NavigateToString方法加载HTML。或者使用Navigate请求URI。

然而,使用WebView控件存在问题,特别是它呈现方式不同,并且不是标准控件,这意味着您的应用栏或设置窗格不会在WebView顶部呈现,通过使用WebViewBrush进行解决,将WebView "绘制"为标准控件,例如矩形,当需要时。


1

此外,您可以对要显示的网页进行截图。但是,要对网页进行截图并不容易,但我建议您使用一些专门用于拍摄其他网站的网站来完成。然后,您可以下载这些网站返回的图像,并在Windows 8应用程序中打开和显示它。我向您展示了一些示例,说明如何做到这一点:

 StorageFolder screens = await Windows.ApplicationModel.Package.Current.InstalledLocation.CreateFolderAsync(@"Screens\" + folderName, CreationCollisionOption.GenerateUniqueName);
 var downloader = new BackgroundDownloader();
 IStorageFile file = await screens.CreateFileAsync(fname, CreationCollisionOption.GenerateUniqueName);
 string my_uri = "http://api.snapito.com/web/e3c351d5994134eb1aea855ce78e296c3292d48a/lc/" + url + "?type=jpeg";
 DownloadOperation download = downloader.CreateDownload(new System.Uri(my_uri), file);
 await download.StartAsync();

0

我认为只有两个选项,但它们都不是非常好的:

  • 使用WebView并使用CSS和其他技术转换您的HTML以呈现原生外观。使用ScriptNotifyNavigationStarting和其他事件导航到另一个页面。在W8.1中,WebView更好(例如,被视为常规控件而不是浮动在所有其他控件上方...)

  • 解析您的HTML并生成本机元素。我已经开始了这样的实现,并创建了一个XAML控件来显示具有本机控件的HTML(请参见https://mytoolkit.codeplex.com/wikipage?title=HtmlTextBlock)。但是,如果您有复杂的HTML(例如iframe等),这可能无法正常工作,并且您别无选择,只能使用WebView控件。


谢谢,我会仔细阅读并尽快回复您。 - Kumar
也许你需要更改FixedHtmlTextBlock ItemsControl的items panel以拥有正确的Win8文本流。 - Rico Suter

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