UIWebview在控制台中遇到以下消息。
void SendDelegateMessage(NSInvocation*): delegate (webView:didFinishLoadForFrame:)
failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
谁知道这是什么?
答案 0 :(得分:19)
您正在加载的网页上使用任何Javascript吗?
具体来说,您使用的方法是
吗?- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
由于docs表示以下
每个顶级入口点的JavaScript执行时间限制为10秒。如果脚本执行的时间超过10秒,则Web视图将停止执行脚本
这似乎与您在控制台中看到的错误消息相关联
答案 1 :(得分:3)
FWIW,看起来我的特定超时是由于在罕见情况下的javascript错误而发生的。您可以尝试将JS包装在try / catch中,或者将其改进为更容错。
更多细节:我使用的是以下JS字符串:
NSString* js = @"document.getElementById(\"main\").offsetHeight";
int height = [[_web_view stringByEvaluatingJavaScriptFromString:js] intValue];
我知道如果Web视图没有完全加载会发生这个UIWebView问题(例如,在webViewDidFinishLoad:方法之前调用JS,所以我猜测可能是“主”对象丢失。因此,我将我的JS修改为以下它有效:
NSString* js = @"document.getElementById(\"main\") ? document.getElementById(\"main\").offsetHeight : -1";
答案 2 :(得分:0)
以下代码段为我工作。
if(!webview.isLoading)
{
// update your code.
}
答案 3 :(得分:0)
尝试使用WKWebView而不是UIWebView。这对我有用。
在我的情况下,我尝试使用UIWebView打开本地PDF。一些PDF可能包含一些JS代码。然后我遇到了这个问题。
使用WKWebView后,一切都很完美
如果您的应用程序在iOS 8及更高版本中运行,Apple建议您使用WKWebView