UIwebView implements offline caching of html_html/css_WEB-ITnose

WBOY
Release: 2016-06-24 11:47:57
Original
866 people have browsed it

1、html的缓存主要采取ASIHTTPRequest的缓存策略
(1)、设置缓存策略

    //设置缓存    ASIDownloadCache *cache=[[ASIDownloadCache alloc] init];    self.myCache=cache;    //设置缓存路径    NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);    NSString *documentDirectory = [paths objectAtIndex:0];    //设置缓存存放路径    [self.myCache setStoragePath:[documentDirectory stringByAppendingPathComponent:@"resource"]];    //ASIAskServerIfModifiedCachePolicy 与默认缓存大致一样,区别仅是每次请求都会 去服务器判断是否有更新    //ASIOnlyLoadIfNotCachedCachePolicy 如果有缓存在本地,不管其过期与否,总会拿来使用    //ASIFallbackToCacheIfLoadFailsCachePolicy 这个选项经常被用来与其它选项组合使用。请求失败时,如果有缓存当网络则返回本地缓存信息    [self.myCache setDefaultCachePolicy:ASIFallbackToCacheIfLoadFailsCachePolicy];      //设置缓存策略
Copy after login

(2)、设置异步缓存

   NSURL *Requesturl=[NSURL URLWithString:url];    ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:Requesturl];    // //获取全局变量    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];    // //设置缓存方式    [request setDownloadCache:appDelegate.myCache];    // //设置缓存数据存储策略,这里采取的是如果无更新或无法联网就读取缓存数据    [request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];    [request setDelegate:self];     [request startAsynchronous];
Copy after login

html缓存完成。如想查看详细 请点击 : IOS开发网络篇之──ASIHTTPRequest详解

2、html中的图片缓存
(1)、通过正则获取html代码中的所有图片url

  NSString *urlPattern = @"<img[^>]+?src=[\"']?([^>'\"]+)[\"']?";    NSError *error = [NSError new];    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:urlPattern options:NSRegularExpressionCaseInsensitive error:&error ];    //match 这块内容非常强大    NSUInteger counts =[regex numberOfMatchesInString:content options:NSRegularExpressionCaseInsensitive range:NSMakeRange(0, [content length])];//匹配到的次数    if(counts > 0){        NSArray* matches = [regex matchesInString:content options:NSMatchingReportCompletion range:NSMakeRange(0, [content length])];        for (NSTextCheckingResult *match in matches) {            NSInteger count = [match numberOfRanges];//匹配项            for(NSInteger index = 0;index < count;index++){                NSRange halfRange = [match rangeAtIndex:index];                if (index == 1) {                    //[listImage addObject:[content substringWithRange:halfRange]];                    NSLog(@"转换出来的字符串===%@",[content substringWithRange:halfRange]);                    [listImage addObject:[content substringWithRange:halfRange]];                }            }        }//遍历后可以看到三个range,1、为整体。2、为([\\w-]+\\.)匹配到的内容。3、([\\w.%&=-]*)匹配到的内容    }
Copy after login

(2)、SDwebImage下载图片 、JS交互替换

 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);    dispatch_group_t group = dispatch_group_create();    for (int i = 0; i < listImage.count; i++)    {        NSString *imageUrl = [imageUrlArray objectAtIndex:i];        NSString *key=[self getMd5_32Bit_String:imageUrl];        UIImage *cachedImage=[[SDImageCache sharedImageCache] imageFromDiskCacheForKey:key]; NSString *index = [NSString stringWithFormat:@"%d", i]; if (cachedImage) { [tchWebView stringByEvaluatingJavaScriptFromString:[self createSetImageUrlJavaScript:index imgUrl:key]];        }else{            dispatch_group_async(group, queue, ^{                //异步下载图片                [SDWebImageDownloader.sharedDownloader downloadImageWithURL:[NSURL URLWithString:imageUrl]                                                                    options:0                                                                   progress:^(NSInteger receivedSize, NSInteger expectedSize)                 {                     // progression tracking code                 }                                                                  completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished)                 {                     if (image && finished)                     {                         [[SDImageCache sharedImageCache] storeImage:image forKey:key]; dispatch_sync(dispatch_get_main_queue(), ^{ [tchWebView stringByEvaluatingJavaScriptFromString:[self createSetImageUrlJavaScript:index imgUrl:key]];                         });                     }                 }];            });        }    }    dispatch_release(group);
Copy after login
//设置下载完成的图片到web img- (NSString *)createSetImageUrlJavaScript:(NSString *) index imgUrl:(NSString *) url{    UIImage *myCachaImage=[[SDImageCache sharedImageCache] imageFromDiskCacheForKey:url]; NSData *imageData = UIImageJPEGRepresentation(myCachaImage,1.0); NSString *imageSource = [NSString stringWithFormat:@"data:image/jpg;base64,%@",[imageData base64Encoding]];    NSString *js = [NSString stringWithFormat:@"var imgArray = document.getElementsByTagName('img'); imgArray[%@].src=\"%@\"; " , index, imageSource];    return js;}
Copy after login
//32位MD5加密方式- (NSString *)getMd5_32Bit_String:(NSString *)srcString{    const char *cStr = [srcString UTF8String];    unsigned char digest[CC_MD5_DIGEST_LENGTH];    CC_MD5( cStr, strlen(cStr), digest );    NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)        [result appendFormat:@"%02x", digest[i]];    return result;}
Copy after login

参考:http://bbs.csdn.net/topics/390831054

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template