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 ответа

Решение

У меня были похожие проблемы (отсутствующие изображения и т. Д.). Вы должны предоставить baseURL. Пытаться:

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

Чтобы отобразить панель загрузки, вы должны сделать какой-то обходной путь, потому что вы не можете знать ход загрузки ресурсов.

Многие приложения используют трюки, чтобы симулировать, что идет загрузка. Вот простой пример, иллюстрирующий эту идею:

  • Отображение полосы загрузки с прогрессом 30% в течение 1 секунды.
  • Если запрос не был завершен, отображать ход выполнения 90% до его завершения.
  • Когда запрос завершится, оживите прогресс до 100%.

Вы можете взглянуть на эту библиотеку с открытым исходным кодом, чтобы увидеть, как это делается. Вы можете сделать это аналогичным образом. https://github.com/ninjinkun/NJKWebViewProgress

Другие вопросы по тегам