WKWebView зависает при загрузке локальной веб-страницы с определенной настройкой сети.

У меня есть WKWebView, который загружает локальный набор веб-страниц с использованием WKWebViewConfiguration чтобы установить конфигурацию для @"allowFileAccessFromFileURLs" как истину.

Запрос настроен примерно так:

 NSURL *url = [[NSBundle mainBundle] URLForResource:@"testPage" withExtension:@"html" subdirectory:@"html/pages"]; NSURLRequest *req = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10.0f]; 

Затем запрос отправляется с использованием следующего метода WKWebview:

 - (nullable WKNavigation *)loadRequest:(NSURLRequest *)request; 

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

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

Например, если устройство подключено к беспроводной сети, но кондиционер сетевой линии установлен на 100% -ную потерю. Создается веб-просмотр, и запрос отправляется для загрузки локального контента, запускающего зависание нагрузки.

Я подумал, что WKWebView может попытаться сделать какую-то проверку в фоновом режиме, которая требует сетевой транзакции, но я сделал некоторое профилирование сети с помощью инструментов, а также некоторую запись временной шкалы в веб-браузере Safari, и я не мог видеть ничего, что могло бы вызвать это повесить.

Единственная причина, по которой я могу думать о загрузке локального контента через 50 секунд или около того, – это то, что он ударил какой-то тайм-аут WKWebView для загрузки сетевого подключения.

Любая помощь будет очень признательна, спасибо.

One Solution collect form web for “WKWebView зависает при загрузке локальной веб-страницы с определенной настройкой сети.”

Хорошо, так что для всех, кто спотыкается об этом, я обнаружил, что я делаю неправильно.

Проблема была не в самом деле WKWebview или в самом веб-контенте, так как я обрабатывал завершение загрузки веб-обозревателя.

в методе:

 - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{ 

Я слушал завершение событий, оценивая некоторые JS так:

 -(void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation { [webView evaluateJavaScript:@"document.body.innerHTML" completionHandler:^(id result, NSError *error) { if (result != nil) { [self doCertainNetworkEvent]; //here another method is called with a networking function inside of it. } if(error) { NSLog(@"evaluateJavaScript error : %@", error.localizedDescription); } }]; } 

Блок завершения, конечно, не смог закончить, пока функция сети в вызове метода didFinishNavigation не была закончена (что не могло быть связано с отсутствием трафика).

  • WKWebView пустой после «успешного» HTTPS NSURLRequest
  • Как устранить нарушения в Google Login / Registration на WKWebView?
  • WKWebView и UIMenuController
  • Включить кеш приложений в WKWebView
  • Два WKWebViews используют локальное хранилище, но только после перезапуска
  • Что может привести к тому, что действия UIAlertController никогда не будут вызваны?
  • Аутентификация с помощью WKWebView в Swift
  • iOS10 WKWebview - оценкаJavaScript ("document.height") return nil
  • Поддержка HTTP-прокси с помощью WKWebView
  • Могу ли я установить файлы cookie для использования WKWebView?
  • Ускорьте загрузку WKWebView
  • Ошибка Ajax с HTTP-статусом 0 при использовании плагина Cordova WKWebView на iOS
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.