2015-10-20 59 views
1

我正在研究支持iOS 8和9的應用程序,使用WKWebView在我的應用程序中使用WKWebView。iOS 9 WKWebView產生「未能加載資源:取消」,其中iOS 8不會

現在,我已將我的網站和ATS中的子域列入白名單(等待一些SSL證書更改)。所以我不認爲我要描述的是與ATS有關,但是誰知道。

我的本機代碼在我的WKWebView中調用一個javascript函數,該函數使用jQuery觸發ajax GET請求。

在iOS 8中,它每次都有效。

在iOS 9中,它有時只有工作。看似不到一半的時間。

當我使用Safari瀏覽器的開發者控制檯,我的iPhone連接到桌面上,掛接到WKWebView,我能看到這個錯誤:

Failed to load resource: cancelled

至於我可以告訴,網絡請求甚至不會被製作。我一直在盯着這個問題已經有2天了,我無法辨別出網絡請求被「取消」的原因。在某些情況下,我會在ajax請求上調用.abort(),但在診斷此問題時,我已將所有這些內容評論出來。

是否有其他人在iOS 8中遇到過像iOS 8這樣的新的ajax問題?

任何想法如何我可以找出什麼是「取消」ajax請求?我試過每個我能想到的調試技巧,但調試WKWebView ajax並不那麼容易。

+0

你有沒有解決這個問題?我有同樣的問題。 – Nancy

+0

@Nancy查看我剛發佈的答案。我不確定它爲什麼對我們有效,我的猜測僅僅是ajax請求被取消,因爲發起請求的控制器在請求時正在被解除(即使請求實際上是在另一個控制器中發生的.. )。 '¯\ _(ツ)_ /' –

回答

1

我不能肯定地說下面的改變爲什麼解決了我們的問題,但只是試圖解釋我們做了什麼,這樣你就可以看到它可能適用於其他地方。

我們通過MTBBarcodeScanner執行一些條碼掃描,並在掃描塊,最終結束了與代碼掃描這樣的:

self.searchController?.decodeBarcode(code) // triggers ajax request, gets cancelled 

delay (0.2) {            
    self?.performSegueWithIdentifier("unwindFromBarcodeScanner", sender: self) 
    self?.scanner?.stopScanning() 
} 

這種延遲()方法是從this SO answer採取的想法,這是我們當我們在展開時試圖停止掃描時遇到了一些其他問題。

所以在遇到這個ajax取消問題後,我們嘗試將ajax調用移入delay代碼塊,現在我們不再面臨這個被取消的問題。它現在看起來像這樣,工作正常:

delay (0.2) {            
    self?.performSegueWithIdentifier("unwindFromBarcodeScanner", sender: self) 
    self?.scanner?.stopScanning() 
    self?.searchController?.decodeBarcode(code) // triggers ajax request, works fine 
}