首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MFC: IInternetProtocolSink无法识别的MIME类型"text/css“

MFC: IInternetProtocolSink无法识别的MIME类型"text/css“
EN

Stack Overflow用户
提问于 2014-02-04 12:36:53
回答 1查看 748关注 0票数 4

我有一个基于IInternetProtocol接口的带有可插拔协议的the浏览器控件。当加载HTML站点时,一切都很好。但是在加载外部CSS样式表时,将忽略MIME类型"text/css“报告给BINDSTATUS_MIMETYPEAVAILABLEBINDSTATUS_VERIFIEDMIMETYPEAVAILABLE

  • 如果我将注册表中的FEATURE_BROWSER_EMULATION设置为8888 (IE8),则外部CSS将正确呈现(在文件夹“IE8”中)
  • 如果我将注册表中的FEATURE_BROWSER_EMULATION设置为11001 (IE11)或除IE8兼容性模式以外的任何东西,则外部CSS将被忽略(在文件夹‘IE11’)
  • 如果HTML包含元标记IE=edge,则忽略外部CSS,因为这将迫使webbrowser控件进入IE11模式。
  • 如果关闭可插拔协议,就会呈现外部CSS,而不依赖于FEATURE_BROWSER_EMULATION的值设置。
  • 如果我关闭可插拔协议,并从演示服务器(在文件夹“server”中)以错误的MIME类型传递CSS样式表,则可以在IE和can浏览器控件中再现可插入协议的行为。
  • 向IHttpNegotiate接口报告标头没有任何效果
  • 使用CoInternetSetFeatureEnabled设置的任何其他功能控件都不会产生任何影响。

我的结论到目前为止

  • IE8和IE8模式下的IE8浏览器控件完全忽略MIME类型,并通过MIME嗅探找到它。
  • 如果传递了错误的MIME类型,则IE9和以后的失败
  • IE9+模式控件中的webbrowser忽略MIME类型"text/ CSS“,就像为CSS样式表设置的任何其他MIME类型一样。

我的问题

  • 有人在可插拔协议上遇到类似的问题吗?如果是的话,你是怎么解决的?
  • 如何正确地向IInternetProtocolSink加载和报告CSS样式表?

在这里,您可以下载示例项目,它演示了这种行为:

https://github.com/elsamuko/SimpleBrowser

以下是不同行为的截图:

http://imgur.com/a/w3oCv

链接:

http://msdn.microsoft.com/en-us/library/aa752046%28v=vs.85%29.aspx

http://www.codeproject.com/Articles/157329/Http-Monitor-for-Webbrowser-Control

http://www.codeproject.com/Articles/12865/An-Asynchronous-Pluggable-Protocol-Handler-for-dat

EN

回答 1

Stack Overflow用户

发布于 2014-02-06 13:40:18

在发布这个问题的同一天,我在C#项目上也遇到了同样的问题。

通过向水槽报告一个BINDSTATUS_CACHEFILENAMEAVAILABLE解决了这个问题。当然,只有当文件的本地副本可用时,这才能工作。下面的代码是用C#编写的,但是它给出了这个工作原理的一般概念。

它甚至可以在没有BINDSTATUS_MIMETYPEAVAILABLE的情况下工作,但这可能会导致其他问题。所以这是不可能的。

希望这能帮上忙。

代码语言:javascript
复制
sink.ReportProgress(UrlMon.BINDSTATUS.BINDSTATUS_MIMETYPEAVAILABLE, mimetype);
sink.ReportProgress(UrlMon.BINDSTATUS.BINDSTATUS_CACHEFILENAMEAVAILABLE, localfilename);
sink.ReportData(UrlMon.BSCF.BSCF_DATAFULLYAVAILABLE, 0, 0);
sink.ReportResult(0, 200, null);

增加:

在实现异步时,除了写入磁盘之外,您可能别无选择。可插拔协议。除了请求之外,还有许多额外的标志。其中一个标志是BINDF.BINDF_NEEDFILE标志( IInternetBindInfo::GetBindInfo方法的第一个参数)。此标志强制您返回文件。

这甚至可能是最初问题的根源。由于某些原因(仅为微软所知),Internet通过添加BINDF_NEEDFILE强制光盘上存在css文件。在互联网上搜索BINDF_NEEDFILE,你会得到很多解释。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21552785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档