我有一个基于IInternetProtocol接口的带有可插拔协议的the浏览器控件。当加载HTML站点时,一切都很好。但是在加载外部CSS样式表时,将忽略MIME类型"text/css“报告给BINDSTATUS_MIMETYPEAVAILABLE和BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE。
我的结论到目前为止:
我的问题:
在这里,您可以下载示例项目,它演示了这种行为:
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
发布于 2014-02-06 13:40:18
在发布这个问题的同一天,我在C#项目上也遇到了同样的问题。
通过向水槽报告一个BINDSTATUS_CACHEFILENAMEAVAILABLE解决了这个问题。当然,只有当文件的本地副本可用时,这才能工作。下面的代码是用C#编写的,但是它给出了这个工作原理的一般概念。
它甚至可以在没有BINDSTATUS_MIMETYPEAVAILABLE的情况下工作,但这可能会导致其他问题。所以这是不可能的。
希望这能帮上忙。
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,你会得到很多解释。
https://stackoverflow.com/questions/21552785
复制相似问题