UIWebview застрял со следующим сообщением в консоли
UIWebview застрял со следующим сообщением в консоли.
void SendDelegateMessage(NSInvocation*): delegate (webView:didFinishLoadForFrame:)
failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
Кто-нибудь знает, что это такое?
Ответы
Ответ 1
Используете ли вы какой-либо Javascript на странице, которую вы загружаете?
В частности, используете ли вы метод
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
Как docs укажите следующие
Время выполнения JavaScript ограничено 10 секундами для каждой точки входа верхнего уровня. Если ваш script выполняется более 10 секунд, веб-просмотр прекращает выполнение script
И это, похоже, связано с сообщением об ошибке, которое вы видите на консоли
Ответ 2
FWIW, похоже, что мой конкретный тайм-аут произошел из-за ошибки javascript в редких сценариях. Вы можете попробовать объединить JS в try/catch или улучшить его, чтобы быть более устойчивым к ошибкам.
Подробнее: Я использовал следующую строку JS:
NSString* js = @"document.getElementById(\"main\").offsetHeight";
int height = [[_web_view stringByEvaluatingJavaScriptFromString:js] intValue];
Я знал, что эта проблема с UIWebView может произойти, если веб-представление не было полностью загружено (например, JS, вызываемый до метода webViewDidFinishLoad:, поэтому я догадался, что, возможно, "основной" объект отсутствует. Таким образом, я изменил свой JS на следующее и это сработало:
NSString* js = @"document.getElementById(\"main\") ? document.getElementById(\"main\").offsetHeight : -1";
Ответ 3
Ниже фрагмент кода работал у меня.
if(!webview.isLoading)
{
// update your code.
}
Ответ 4
Попробуйте использовать WKWebView вместо UIWebView.this работает для меня.
В моем случае я пытаюсь использовать UIWebView для открытия локального PDF. Некоторые из файлов PDF могут содержать некоторые JS-коды. Затем я сталкиваюсь с этой проблемой.
После использования WKWebView все работает просто отлично
Apple также рекомендует использовать WKWebView, если ваше приложение, работающее в iOS 8 и более поздних версиях