检测 UIWebView 何时加载引用文件失败
Posted
技术标签:
【中文标题】检测 UIWebView 何时加载引用文件失败【英文标题】:Detect when UIWebView fails to load referenced files 【发布时间】:2013-05-09 01:45:55 【问题描述】:我正在使用一个广泛使用 UIWebViews 来显示从 Web 加载的内容的应用程序。大多数情况下这很有效,但每隔一段时间(尤其是在 3G 上),连接问题就会中断加载。
当它是主 webview 时,这不是问题,因为 webView:didFailLoadWithError: 在委托上调用。但是,页面 html 包含一些引用其他 Web 资源的标签,并且在极少数情况下初始请求会通过,但其中一个后续请求会失败。
似乎我应该能够使用 NSURLProtocol 子类触发对这些故障的处理,但是在 initWithRequest:cachedResponse:client: 中,我找不到确定哪个 UIWebView 触发了请求的方法(所以我可以通知其委托向用户显示某些内容)。我也找不到在其中一个请求被触发时调用的委托方法(webView:shouldStartLoadWithRequest:navigationType: 只为 window.location.href 分配和类似的主文档请求调用,而不是辅助请求)。检测其中一个辅助请求失败(以及它正在尝试加载哪个 URL,以及哪个 UIWebView 正在创建它)的最简单方法是什么?
【问题讨论】:
相关问题无答案:***.com/questions/13061776/… 我们遇到了同样的问题。我们的 HTML 中有从 Amazon S3 提取的内容(图像等),有时它们不会加载。我们需要能够检测到这种情况何时发生。 【参考方案1】:我也遇到了类似的问题,间歇性地无法显示对 .css 和 .js url 的缓存 html 引用。
事实证明,我的问题是 CachePolicy 被设置为引用项的“忽略缓存”,从而使我的“canUseProtocol”委托逻辑无效。
我的解决方案是在离线时在我的缓存协议子类中为 canUseProtocol 返回 YES,然后仅在网络可访问时检查缓存策略。
在您的情况下,我认为您至少可以验证在 canUseProtocol 方法中加载的 url,即使它们失败时您没有得到回调。也许您可以使用自己的自定义协议,默认情况下避免下载资产,然后使用自己的回调单独下载它,以便在成功时将其注入 webview?
希望这会有所帮助!
【讨论】:
以上是关于检测 UIWebView 何时加载引用文件失败的主要内容,如果未能解决你的问题,请参考以下文章