iOS WKWebView載入本地檔案之權威解說
阿新 • • 發佈:2019-02-14
在實際的iOS開發中,我們有很多的地方需要通過WKWebView載入本地的檔案。但是由於WKWebview存在著一些跨域的問題。UIWebView直接載入的方法不能正常使用了。這裡就和大家分享一下常見的幾種處理方法。
GCDWebServer啟動本地伺服器載入
就是在本地啟動一個本地伺服器,可以使用GCDWebServer這個庫,大家感興趣的話可以看看。GCDWebServer介紹的文章(https://www.jianshu.com/p/534632485234)
將檔案複製到沙盒tmp資料夾下
將檔案複製一份到沙盒中的tmp資料夾下進行訪問。具體程式碼如下:
// Fallback on earlier versions NSString *filePath = [NSString stringWithFormat:@"%@%@",JKSandBoxPathTemp,[NSURL URLWithString:self.url].lastPathComponent]; self.tempDirectoryFilePath = filePath; [JKSandBoxManager copyFileFrom:[NSURL URLWithString:self.url].path to:filePath]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL fileURLWithPath:filePath] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:20]; [_webView loadRequest:request];
這種做法的好處是iOS8 之後的作業系統都可以使用。壞處就是每次都需要進行復制,而且關閉頁面後需要刪除複製的檔案。反覆操作增大耗電量,減少記憶體的使用壽命。其中JKSandBoxManager
下載地址如下:https://github.com/xindizhiyin2014/JKSandBoxManager
使用iOS9 之後的載入方法
使用iOS9 之後新出的方法去載入,這個相對來說比較的簡單。具體程式碼如下:
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; [config.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"]; _webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config]; if ([self.url hasPrefix:@"file://"]) { if (@available(iOS 9.0, *)) { NSURL *accessURL = [[NSURL URLWithString:self.url] URLByDeletingLastPathComponent]; [_webView loadFileURL:[NSURL URLWithString:self.url] allowingReadAccessToURL:accessURL]; } }
這些方法我這邊都已經檢測過了,已經整合到了線上的app,大家可以放心使用哦。
更多優質文章,可以微信掃碼關注: