UIwebView实现html的离线缓存_html/css_WEB-ITnose

php中文网
发布: 2016-06-24 11:47:57
原创
1041人浏览过

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];      //设置缓存策略
登录后复制

(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 [^ alt="UIwebView实现html的离线缓存_html/css_WEB-ITnose" >]+?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交互替换

ChatBA
ChatBA

AI幻灯片生成工具

ChatBA 74
查看详情 ChatBA

立即学习前端免费学习笔记(深入)”;

 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);
登录后复制
//设置下载完成的图片到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;}
登录后复制

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

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号