检测 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 何时加载引用文件失败的主要内容,如果未能解决你的问题,请参考以下文章

如何判断 UIWebView 何时完成渲染(未加载)?

如何检测UIWebView中的单击文件链接?

知道何时在 UIWebView 中加载了 AJAX

@interface 中的 UIWebView 委托设置

检测 UIWebView 中的文本亮点

UI控件(UIWebView)