2013-05-09 90 views
2

我正在使用大量使用UIWebViews顯示從Web加載的內容的應用程序。大多數情況下,這種方式運行良好,但每過一段時間(尤其是3G),連接問題都會中斷加載。當UIWebView無法加載參考文件時檢測到

當它是主網頁視圖時,這不是問題,因爲在委託上調用了webView:didFailLoadWithError:。但是,頁面HTML包含一些引用其他Web資源的標籤,偶爾會發生初始請求,但其中一個後續請求會失敗。

看來我應該能夠觸發處理這些失敗與NSURLProtocol子類,但在initWithRequest:cachedResponse:客戶端:,我找不到一種方式來確定哪個UIWebView發射請求(所以我可以通知它的代表向用戶顯示一些東西)。當其中一個請求被觸發時(webView:shouldStartLoadWithRequest:navigationType:僅針對window.location.href分配和類似的主要文檔請求,而不是輔助請求),我無法找到被調用的委託方法。檢測其中一個次要請求失敗的最簡單方法是什麼(以及它試圖加載哪個URL以及哪個UIWebView正在創建它)?

+0

沒有答案的相關問題:http://stackoverflow.com/questions/13061776/correlate-nsurlrequest-with-uiwebview – Arkaaito 2013-05-09 01:50:13

+0

我們有同樣的問題。我們的HTML中有內容(圖像等)來自Amazon S3,有時它們不會加載。我們需要能夠檢測到這種情況。 – Gerry 2014-08-18 17:52:05

回答

0

我也遇到類似的問題,間歇性失敗顯示緩存的HTML引用.css和.js網址。

原來,我的問題是CachePolicy被設置爲「忽略緩存」的參考項目,從而使我的「canUseProtocol」委託邏輯失效。

我的解決方案是在離線時爲我的緩存協議子類中的canUseProtocol返回YES,然後在網絡可達時檢查緩存策略。

在你的情況下,我認爲你至少可以驗證canUseProtocol方法中加載的URL,即使你沒有得到它們的回調,如果它們失敗。也許你可以使用自己的自定義協議來避免默認下載資源,然後使用自己的回調單獨下載它,以便在成功時將其注入到webview中?

希望這會有所幫助!