WKWebview的那些坑之iOS8加载问题

最近在研究WKWebview,发现在iOS8系统的真机上本地h5文件加载不了,而模拟器上是正常的。通过不断的打印日志打包在第三方测试平台上远程测试,发现h5文件根本没有加载,根据这条线索,在网上查找很多资料说iOS8要将h5的文件拷贝到temp目录下才能加载,于是我按照这种方法处理后再打包远程测试,webview还是加载不出来,通过观察日志,发现一条重要线索“Could not create a sandbox extension for'/'”,于是我想这有可能与h5文件的目录结构有关,将h5文件下的子目录下的文件全部移到h5目录下。再打包测试,完美解决问题(欢迎大家和我交流)。


总结:WKWebView 在iOS9及以上用户API

[self.wkwebViewloadFileURL:fileURLallowingReadAccessToURL:fileURL];

 

 

iOS8上用

NSURLRequest *request= [NSURLRequestrequestWithURL:fileURL];

[self.wkwebViewloadRequest:request];

而且iOS8上h5文件的目录下不要有子目录(不知道为啥,欢迎有知道的告知),文件全部放在一级目录下面,并且要将整个h5文件拷贝到temp目录上,经过测试发现只能拷贝到tmp目录,拷贝到caches目录下加载不到html文件,包括caches目录下的图片也无法正常加载(欢迎有知道原因的童鞋告知和指正,有错误之处欢迎拍砖)。以下附上代码:

 

//加载h5文件方法

- (void)loadHtml:(NSString *)html

{

   

    NSString *urlStr = [[NSBundlemainBundle]pathForResource:htmlofType:nil];

   //注意:html中包含了.html后缀若未包含则ofType参数需填写参数@“html”


    NSLog(@"urlStr = %@",urlStr);

    if(urlStr){

        NSURL *fileURL = [NSURLfileURLWithPath:urlStr];

        NSLog(@"fileURL = %@",fileURL);

       

       

        if ([[UIDevicecurrentDevice].systemVersionfloatValue] >=9.0) {

            [self.wkwebViewloadFileURL:fileURLallowingReadAccessToURL:fileURL];

        } else {

            //ios8以下特殊处理

            NSURL *directoryUrl =[selffileURLForBuggyWKWebView8];

           

            fileURL= [NSURL fileURLWithPath:[directoryUrl.relativePathstringByAppendingFormat:@"/%@",html]];

           

            NSURLRequest *request= [NSURLRequestrequestWithURL:fileURL];

           

            [self.wkwebViewloadRequest:request];

           

        }

    }

}

 

//将文件copytmp目录(经过测试发现只能拷贝到tmp目录 ,拷贝到caches目录下加载不到html文件,包括caches目录下的图片,欢迎有知道原因的童鞋告知)

- (NSURL*)fileURLForBuggyWKWebView8{

    NSError *error = nil;

   

    NSString *urlStr = [[NSBundlemainBundle]pathForResource:@"assets"ofType:nil];

    NSURL *fileURL = [NSURLfileURLWithPath:urlStr];

   

    // Create "/temp/www" directory

    NSFileManager *fileManager= [NSFileManagerdefaultManager];

   

    NSString *path = [NSTemporaryDirectory()stringByAppendingPathComponent:fileURL.lastPathComponent];

   

    //   NSURL *temDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory()];

    NSURL *dstURL = [NSURLfileURLWithPath:path];

   

    if ([fileManager fileExistsAtPath:path]) {

       

        NSLog(@"已经存在文件");

        return dstURL;

    }

    //   [fileManager createDirectoryAtURL:temDirURLwithIntermediateDirectories:YES attributes:nil error:&error];

   

    // Now copy given file to the tempdirectory

    [fileManager removeItemAtURL:dstURLerror:&error];

    [fileManager copyItemAtURL:fileURLtoURL:dstURLerror:&error];

    // Files in "/temp/www" loadflawlesly :)

    return dstURL;

}

你可能感兴趣的:(iOS开发,iOS基础)