UIwebView實現html的離線緩衝,uiwebview離線緩衝

來源:互聯網
上載者:User

UIwebView實現html的離線緩衝,uiwebview離線緩衝

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[^>]+?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: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.