UIWebview在控制台中遇到以下消息

时间:2011-06-27 07:02:53

标签: iphone ios uiwebview

UIWebview在控制台中遇到以下消息。

void SendDelegateMessage(NSInvocation*): delegate (webView:didFinishLoadForFrame:)   
failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
谁知道这是什么?

4 个答案:

答案 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