2

我正在使用一个广泛使用 UIWebViews 来显示从 Web 加载的内容的应用程序。大多数时候这很好用,但每隔一段时间(尤其是在 3G 上),连接问题就会中断加载。

当它是主 webview 时,这不是问题,因为 webView:didFailLoadWithError: 在委托上调用。但是,页面 HTML 包含一些引用其他 Web 资源的标签,并且在极少数情况下,初始请求会通过,但其中一个后续请求会失败。

似乎我应该能够使用 NSURLProtocol 子类触发对这些故障的处理,但是在 initWithRequest:cachedResponse:client: 中,我找不到确定哪个 UIWebView 触发了请求的方法(以便我可以通知它委托向用户显示某些内容)。我也找不到在其中一个请求被触发时调用的委托方法(webView:shouldStartLoadWithRequest:navigationType: 只为 window.location.href 分配和类似的主文档请求调用,而不是辅助请求)。检测其中一个辅助请求失败(以及它试图加载哪个 URL,以及哪个 UIWebView 正在制作它)的最简单方法是什么?

4

1 回答 1

0

我也遇到了类似的问题,间歇性地无法显示对 .css 和 .js url 的缓存 html 引用。

事实证明,我的问题是 CachePolicy 被设置为参考项的“忽略缓存”,从而使我的“canUseProtocol”委托逻辑无效。

我的解决方案是在离线时在我的缓存协议子类中为 canUseProtocol 返回 YES,然后仅在网络可访问时检查缓存策略。

在您的情况下,我认为您至少可以验证在 canUseProtocol 方法中加载的 url,即使它们失败时您没有得到回调。也许您可以使用自己的自定义协议来避免默认下载资产,然后使用自己的回调单独下载它,以便在成功时将其注入 webview?

希望这可以帮助!

于 2017-08-02T00:15:03.157 回答