【发布时间】:2014-02-28 10:33:31
【问题描述】:
我有一个带有基于 IInternetProtocol 接口的可插入协议的网络浏览器控件。加载 HTML 网站时,一切都很好。但是在加载外部 CSS 样式表时,报告给 BINDSTATUS_MIMETYPEAVAILABLE 和 BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE 的 MIME 类型“text/css”会被忽略。
- 如果我将注册表中的 FEATURE_BROWSER_EMULATION 设置为 8888 (IE8),则外部 CSS 会正确呈现(在文件夹“注册表”中)
- 如果我在注册表中将 FEATURE_BROWSER_EMULATION 设置为 11001 (IE11) 或除 IE 8 兼容模式之外的任何内容,外部 CSS 将被忽略(在“注册表”文件夹中)
- 如果 HTML 站点包含元标记 IE=edge,外部 CSS 将被忽略,因为这会强制 webbrowser 控件进入 IE11 模式
- 如果我关闭可插拔协议,则呈现外部 CSS,与 FEATURE_BROWSER_EMULATION 设置的值无关
- 如果我关闭可插入协议并从演示服务器(在“服务器”文件夹中)提供具有不匹配的错误 MIME 类型的 CSS 样式表,则可在 IE 和 Web 浏览器控件中重现可插入协议的行为
- 向IHttpNegotiate接口上报headers无效
- 使用 CoInternetSetFeatureEnabled 设置的任何其他功能控件均无效
我目前的结论:
- IE8和IE8模式下的浏览器控件完全忽略MIME类型,通过MIME嗅探发现
- 如果传递了错误的 MIME 类型,IE9 及更高版本将失败
- IE9+ 模式控制中的网络浏览器会忽略 MIME 类型“text/css”,就像为 CSS 样式表设置的任何其他 MIME 类型一样
我的问题:
- 有人遇到过类似的可插拔协议问题吗?如果是,你是如何解决这个问题的?
- 如何正确加载 CSS 样式表并将其报告给 IInternetProtocolSink?
您可以在此处下载示例项目,该项目演示了行为:
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
【问题讨论】:
-
试试这个看看是否有帮助:stackoverflow.com/a/21654398/1768303
-
看最后一点:“使用 CoInternetSetFeatureEnabled 设置的任何其他功能控件均无效”
标签: internet-explorer mfc webbrowser-control mime ole