1. 程式人生 > >iOS WKWebView載入本地檔案之權威解說

iOS WKWebView載入本地檔案之權威解說

  在實際的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,大家可以放心使用哦。

更多優質文章,可以微信掃碼關注:
這裡寫圖片描述