开发者

UIWebview gets stuck with the following message in console

UIWebview gets stuck with the following message in console.

void SendDelegateMessage(NSInvocation*): delegate (webView:didFinishLoadForFrame:)   
failed to r开发者_如何学编程eturn after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode

anyone knows what this is??


Are you using any Javascript on the page you are loading?

Specifically, are you using the method

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

As the docs state the following

JavaScript execution time is limited to 10 seconds for each top-level entry point. If your script executes for more than 10 seconds, the web view stops executing the script

And this seems to tie in with the error message you are seeing in the console


FWIW, it looks like my particular timeout was occurring due to a javascript error in rare scenarios. You might try wrapping your JS in a try/catch or improving it to be more error-tolerant.


More details: I was using the following JS string:

NSString* js = @"document.getElementById(\"main\").offsetHeight";
int height = [[_web_view stringByEvaluatingJavaScriptFromString:js] intValue];

I knew that this UIWebView problem could happen if the web view was not fully loaded (eg. JS called before the webViewDidFinishLoad: method, so I guessed that perhaps the "main" object was missing. Thus, I modified my JS to the following and it worked:

NSString* js = @"document.getElementById(\"main\") ? document.getElementById(\"main\").offsetHeight : -1";


Below code snippet worked for me.

if(!webview.isLoading)
{
   // update your code.
}


Try to use WKWebView instead of UIWebView.this works for me.

In my case, I try to use UIWebView to open local PDF.some of the PDF may contain some JS code.then I run into this problem.

After using WKWebView, everything works just perfect

Apple also recommends you to use WKWebView if your app that runs in iOS 8 and later

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜