我有一个带有基于IInternetProtocol接口的可插拔协议的webbrowser控件。加载HTML网站时,一切都很好。但是,在加载外部CSS样式表时,将忽略报告为 BINDSTATUS_MIMETYPEAVAILABLE 的MIME类型“text / css”和 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
答案 0 :(得分:3)
在发布此问题的同一天,我在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方法的第一个参数)。此标志会强制您返回文件。
这甚至可能是原始问题的原因。出于某种原因(仅限Microsoft),Internet Explorer通过添加BINDF_NEEDFILE强制css文件存在于光盘上。在互联网上搜索BINDF_NEEDFILE,你会得到很多解释。