NSURLSession未下载完整网页

时间:2014-03-01 03:59:14

标签: html objective-c uiwebview nsdata nsurlsession

我目前正在尝试使用NSURLSession下载网页,以便检索下载进度的状态更新。不幸的是,在下载网页后,当我去加载网页时,存在视觉问题(缺少图像,缺少javascript,缺少样式等),使网页看起来破碎且完整。直接加载到webView时,一切都正确加载。我想知道是否有一种方法(或我遗漏的任何东西)下载网页的所有方面并加载它们以便我可以加载完整的网页并在页面加载时显示加载栏。

   - (void)loadRequest:(NSURLRequest *)request
{
    NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
    self.urlSession = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    self.downloadTask = [self.urlSession downloadTaskWithRequest:request];
    [self.downloadTask resume];
}

    - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)downloadURL
{
    [_webView loadData:[NSData dataWithContentsOfURL:downloadURL] MIMEType:downloadTask.response.MIMEType textEncodingName:downloadTask.response.textEncodingName baseURL:nil];
}

2 个答案:

答案 0 :(得分:0)

我遇到了类似的问题(缺少图像等)。您需要提供baseURL。尝试:

[_webView loadData:[NSData dataWithContentsOfURL:downloadURL] MIMEType:downloadTask.response.MIMEType textEncodingName:downloadTask.response.textEncodingName baseURL:downloadTask.response.URL];

答案 1 :(得分:0)

为了显示加载栏,您必须进行某种解决方法,因为您无法知道正在下载的资源的进度。

许多应用程序使用技巧来模拟正在进行加载。 这是一个说明这个想法的简单例子:

  • 显示加载条,进度为30%,持续1秒。
  • 如果请求未完成,请在进度完成前显示90%的进度
  • 请求完成后,将进度设置为100%。

您可以查看这个开源库,看看它是如何完成的。你可以用类似的方式做到这一点。 https://github.com/ninjinkun/NJKWebViewProgress