image07.png
WKWebView自推出之后,得到不少同學的贊揚。主要的贊揚集中在2個方面:加載快,CPU和內存耗用都很小。
很少有人說這個東西的壞話。而我,則來潑2盆冷水。我親身使用之后,得出的結論是:WKWebView只是Apple的一個半成品而已,并不能在所有的場合下替換UIWebView(或者Cocoa中的WebView)。
WKWebView的第一個缺陷:加載本地資源有bug
經常有需求需要加載HTML5的內容。在這種場景下,可能使用WKWebView會遇到一些問題。
你可以使用loadHTMLString
來加載頁面,但是,如果HTML字符串中有本地資源的話,你會發現不會加載。
當然有辦法可以繞過去,一個辦法是在應用內嵌入一個提供HTTP服務的組件。但是但是,這樣做多惡心啊!
另一個辦法,有人發現WKWebView并不是完全不能加載本地文件,如果文件放在temp
目錄下,還是可以加載的。于是,每次將資源靠背到那個目錄(實現方法參考http://stackoverflow.com/questions/24882834/wkwebview-not-loading-local-files-under-ios-8 )
但是但是,這樣做不光惡心,而且嘔吐啊
WKWebView的請求不可以被NSURLProtocol截獲
使用NSURLProtocol攔截應用內的NSURLRequst請求是一種高超的技術,可以實現自定義的本地緩存等方案。這種方法既可以攔截UIWebView的請求,也可以攔截通過代碼使用NSURLConnect或者NSURLSession發出的請求。
不過,WKWebView卻是個例外。
補充:
@3121d806fb53 提出在github上有人針對這個問題整了個解決辦法。經 @深淵漫步者亞爾特留斯 實測有效。
綜上,WKWebView只是Apple的一個半成品而已,需要酌情使用。