UIWebview застревает со следующим сообщением в консоли - PullRequest
15 голосов
/ 27 июня 2011

UIWebview застревает со следующим сообщением в консоли.

void SendDelegateMessage(NSInvocation*): delegate (webView:didFinishLoadForFrame:)   
failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode

Кто-нибудь знает, что это такое?

Ответы [ 4 ]

19 голосов
/ 27 июня 2011

Используете ли вы какой-либо Javascript на странице, которую вы загружаете?

В частности, вы используете метод

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script

В качестве документов указано следующее

Время выполнения JavaScript ограничено 10 секундами для каждой точки входа верхнего уровня. Если ваш сценарий выполняется более 10 секунд, веб-представление прекращает выполнение сценария

И это, похоже, связано с сообщением об ошибке, которое вы видите в консоли

3 голосов
/ 26 октября 2011

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";
0 голосов
/ 04 августа 2017

Попробуйте использовать WKWebView вместо UIWebView. У меня это работает.

В моем случае я пытаюсь использовать UIWebView для открытия локального PDF. В некоторых файлах PDF может содержаться код JS. Затем я сталкиваюсь с этой проблемой.

После использования WKWebView все работает просто отлично

Apple также рекомендует использовать WKWebView, если ваше приложение работает на iOS 8 и более поздних версиях

0 голосов
/ 01 октября 2015

Ниже у меня работал фрагмент кода.

if(!webview.isLoading)
{
   // update your code.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...