WPF:显示存储在资源程序集中的基于HTML的内容

前端之家收集整理的这篇文章主要介绍了WPF:显示存储在资源程序集中的基于HTML的内容前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的 WPF项目中,我需要呈现基于 HTML内容,其中内容存储在我的WPF项目引用的资源程序集中.

我查看了WPF Frame和WebBrowser控件.不幸的是,它们都只暴露导航事件(导航,导航),但不允许基于请求的URL允许我返回从资源程序集中检索的HTML内容的任何事件.

我可以使用Navigating事件和NavigateToString()方法拦截导航请求并提供HTML内容.但这不适用于拦截图像,CSS文件等的加载调用.

此外,我知道HTML to Flowdocument SDK sample application可能有用,但我可能不得不大幅扩展样本来处理图像和样式表.

对于它的价值,我们还生成要呈现的HTML内容(通过Wiki页面),因此对于所使用的引用图像位置和CSS样式表,源HTML在某种程度上是可预测的(例如,可能没有JavaScript).我们希望从互联网上显示随机HTML内容.

更新:
还可以为每个HTML页面创建一个MHT文件,这样可以将所有图像“内联”为MIME类型,并减少需要进行更细粒度的回调.

解决方法

如果您对使用28 meg DLL感到满意,您可能需要查看 BerkeliumSharp,这是一个围绕着令人敬畏的 Berkelium库的托管包装器. Berkelium使用铬浏览器作为核心,提供屏幕外渲染和委托事件模型.你可以用它做很多很酷的事情,但对于你的特殊问题,在Berkelium中有一个名为ProtocolHandler的接口.协议处理程序的目的是接收URL并将HTTP标头和正文提供回底层呈现引擎.

在BerkeliumSharp测试应用程序(源代码中可用的项目之一)中,您可以看到它的一个特定用途是FileProtocolHandler – 它使用.NET托管类处理“file://”协议的所有文件IO( System.IO).对于像“resource://”这样的组合协议,你可以做同样的事情.实际上只有一种方法需要重写,名为HandleRequest,如下所示:

bool HandleRequest (string url,ref byte[] responseBody,ref string[] responseHeaders)

所以你要使用像“resource:// path / to / my / html”这样的URL,并在该方法中执行所有必要的Assembly.GetResourceStream等.看看如何使用FileProtocolHandler来调整自己的内容应该很容易.

berkelium和berkelium sharp都是开源的,具有BSD许可证.

原文链接:https://www.f2er.com/html/225758.html

猜你在找的HTML相关文章