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