UIwebView实现html的离线缓存

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”]];[self.myCache setDefaultCachePolicy:ASIFallbackToCacheIfLoadFailsCachePolicy];//设置缓存策略

(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];

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.%&=-]*)匹配到的内容}

(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:indeximgUrl:key]];}else{dispatch_group_async(group, queue, ^{//异步下载图片[SDWebImageDownloader.sharedDownloader downloadImageWithURL:[NSURL URLWithString:imageUrl]options:0progress:^(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:indeximgUrl:key]];});}}];});}}dispatch_release(group);//设置下载完成的图片到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;}//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;}

参考:

,靠山山会倒,靠人人会跑,只有自己最可靠。

UIwebView实现html的离线缓存

相关文章:

你感兴趣的文章:

标签云: