【问题标题】:how to cache html5 File(UIWebView)如何缓存html5文件(UIWebView)
【发布时间】:2015-06-29 07:22:14
【问题描述】:

我使用 UIWebView 加载作为 HTML5 应用程序的 URL。
我要做的是缓存 HTML 文件,当没有网络连接时,它会加载缓存。
当连接可以使用时,它会再次加载 URL 以查看是否有新数据

【问题讨论】:

标签: ios uiwebview


【解决方案1】:

你可以试试这样的:

#define APP_PATH_HTML_PAGES_CACHE [[NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"] stringByAppendingPathComponent:@"html_pages_cache"]

- (void)setUrlString:(NSString *)urlString{
    if (![_urlString isEqualToString:urlString]) {
        NSURL *url = nil;
        _urlString = urlString;
        NSString *fileName = [self fileNameFromUrl:_urlString];
        if(isInternetConnected){//load page and store on file system
            url = [NSURL URLWithString:_urlString];
            [self downloadPageWithName:fileName andUrl:url];//download to cache
        }else{
            //network is not available, check for cached file
            if ([self isFileExistInCacheDirectory:fileName]) {
                url = [NSURL fileURLWithPath:[APP_PATH_HTML_PAGES_CACHE stringByAppendingPathComponent:fileName]];
            }
        else {
            //TODO: show offline/error alert
        }
    }
    //load local or remote page
    // here url can point to local file or web page
    NSURLRequest* request = [[NSURLRequest alloc]initWithURL:url];
    //to be sure that view components did initialized.
    if ([self view]) {
        [self.webView loadRequest:request];
    }
}


- (void)downloadPageWithName:(NSString*)fileName andUrl:(NSURL*)url
{
  `dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [self checkIsCacheDirectoryExistOrCreate];`

    NSString *filePath = [APP_PATH_HTML_PAGES_CACHE stringByAppendingPathComponent:fileName];
    NSData *data = [NSData dataWithContentsOfURL:url];
    [data writeToFile:filePath atomically:YES];
    NSLog(@"Download: %@ -> %@", url.absoluteString, filePath);
});

}

【讨论】:

  • 如何使用urlString?例如,我第一次启动应用程序时,它会缓存第一页,然后我终止应用程序。(urlString已被破坏)然后我再次启动应用程序,如果第一页有变化,重新加载url,或者直接加载缓存
  • 如果网络连接可用,则提供的代码在文件系统上缓存页面,如果没有互联网,则从文件系统加载页面。
猜你喜欢
  • 2013-04-16
  • 2010-12-05
  • 1970-01-01
  • 2013-02-09
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
相关资源
最近更新 更多