UIWebView第二次卡住了
Posted
技术标签:
【中文标题】UIWebView第二次卡住了【英文标题】:UIWebView stuck at the second time 【发布时间】:2015-04-22 22:35:44 【问题描述】:我正在开发一个 ios 应用程序,用户可以从收件箱列表中选择一封电子邮件,并在下一页上查看它(有一个 UIWebView 来提供内容)。
这是我观察到的:我第一次选择电子邮件时,它很快就显示在第二页上。但是,如果我返回并选择再次查看电子邮件,则需要很长时间才能在第二页上调用 webViewDidFinishLoad:
。
我在控制台中看到以下消息:
void SendDelegateMessage(NSInvocation *):
delegate (webView:didFinishLoadForFrame:) failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
此消息一打印,内容就会在 WebView 上呈现。
我不明白的是,这总是发生在第二次使用 webview 显示 html 内容时。没有文件/资源的本地缓存,也没有网络问题。
请指出我应该在哪里查看此问题。谢谢!
---- 更新----
在我的随机尝试中,我发现删除了这一行:
self.webView.delegate = self;
将使问题消失。这让我感到更加困惑。为什么让 self 成为代表会导致这样的问题?
---- 更新 2 ----
我发现罪魁祸首是我在 webview 加载 html 后调用的扁平化 html 方法。 如果我删除 NSHTMLTextDocumentType 一切都很好,但我不明白为什么:
+ (NSString *) stripHtmlSchema: (NSString *)htmlString
NSString *flatString = [[[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding]
options:@ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]
documentAttributes:nil
error:nil] string];
return flatString;
----最终更新----
解决了这个问题。 [NSAttributedString alloc] initWithData
执行时间过长,因此阻止了所有内容。
【问题讨论】:
你在 webview 中使用了任何 javascript 代码吗?文档声明“每个***入口点的 JavaScript 执行时间限制为 10 秒。如果您的脚本执行时间超过 10 秒,则 Web 视图将停止执行脚本” @MathiasKogler 感谢您的回复。没有javascript执行。而且我第一次不明白它是如何工作的。 【参考方案1】:解决了这个问题。 [NSAttributedString alloc] initWithData
执行时间过长,因此阻止了所有内容。
【讨论】:
以上是关于UIWebView第二次卡住了的主要内容,如果未能解决你的问题,请参考以下文章
UIWebView loadRequest 重用给出闪烁效果
将 UIWebView 添加到第二个(不是第一个)故事板视图控制器