【问题标题】:NSURLSession is not downloading full webpageNSURLSession 没有下载完整的网页
【发布时间】:2014-03-01 03:59:13
【问题描述】:

我目前正在尝试使用 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];
}

【问题讨论】:

  • 你没有阅读我的完整帖子。我在上面提到,我希望能够显示一个带有下载进度的加载栏。因此,为什么我使用这种方法。我需要知道如何使用这种方法检索所有额外的文件等。加载属性与 IMO 一样无用。它不提供下载状态,并通知您加载完成,即使 JavaScript 内容仍在加载。

标签: html objective-c uiwebview nsdata nsurlsession


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    • 以 30% 的进度显示加载栏,持续 1 秒。
    • 如果请求未完成,则显示进度 90%,直到进度完成
    • 请求完成后,将进度设置为 100%。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多