加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

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

发布时间:2020-12-14 18:38:03 所属栏目:资源 来源:网络整理
导读:在我的 WPF项目中,我需要呈现基于 HTML的内容,其中内容存储在我的WPF项目引用的资源程序集中. 我查看了WPF Frame和WebBrowser控件.不幸的是,它们都只暴露导航事件(导航,导航),但不允许基于请求的URL允许我返回从资源程序集中检索的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许可证.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读