从字符串缓慢加载UIWebView

时间:2013-08-16 12:24:17

标签: iphone ios cocoa-touch uiwebview

我正在尝试从字符串加载UIWebView,如下所示:

    NSString* plainContent = @"...";
    NSString* htmlContentString = [[NSString stringWithFormat:
                                   @"<html>"
                                   "<style type=\"text/css\">"
                                   "body { background-color:transparent; font-family:Arial-BoldMT; font-size:18;}"
                                   "</style>"
                                   "<body>"
                                   "<p>%@</p>"
                                   "</body></html>", plainContent] retain];
    [webView loadHTMLString:htmlContentString baseURL:nil];

普通内容有一些简单的HTML,包含大约5个链接和400个字符。我正试图在我的iPhone5上运行它,并且第一次加载它总是需要几秒钟。有谁知道为什么会这样,以及如何解决这个问题?

4 个答案:

答案 0 :(得分:6)

我最近在努力学习UIWebView。它似乎需要很长时间来处理我提供的本地HTML(在iPad Air 2模拟器上1或2秒),即使它非常小。

经过大量的谷歌搜索,我发现罪魁祸首是webview上的电话号码检测。一旦我在故事板上取消选中它,延迟就消失了。

希望它可以帮助面临同样问题的人:)

答案 1 :(得分:3)

这通常是因为在呈现网页时使用CSS。在本地加载页面时是默认行为。我们还可以考虑在第一次加载时,UIWebview没有缓存,并为该页面创建缓存。

为了快速实现,请尝试从文件中加载页面,例如

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"filePath" ofType:@"html" inDirectory:@"."]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
CSS这样的{p> body { background-color:transparent; font-family:Arial-BoldMT; font-size:18;}也会增加加载页面的时间。

答案 2 :(得分:0)

对于遇到此问题的其他人,有时我们会通过现有网站的复制粘贴创建HTML文件,但我们忘记检查标题上的链接。

在我的情况下,我忘记在我的html字符串标题中删除未使用的链接rel:

NSString* html = [NSString stringWithFormat:@"<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title>%@</title><link type=\"text/css\" rel=\"stylesheet\" href=\"http://192.168.3.183/assets/css/question.css?1383042738\" /></head><body><h1 style=\"font-size: 2em; margin-bottom: 0; color: #3357b8; font-weight: bold\">%@</h1><div style=\"color: #555\">%@</div><br><p style=\"line-height: 1.7em\">%@</p><a href=\"%@\"><b>Open in browser</b></a><br></body></html>", title, title, dateString, content, detail];

上面链接指向的本地网址使得加载时间更加糟糕。

<link type=\"text/css\" rel=\"stylesheet\" href=\"http://192.168.3.183/assets/css/question.css?1383042738\" />

不要忘记重新检查HTML字符串中的标题或其他链接,如果未使用则删除它。

答案 3 :(得分:0)

对于WKWebView,禁用WKWebView的数据检测器对我有用。迅捷版:

let webViewCofig = WKWebViewConfiguration()
webViewCofig.dataDetectorTypes = []
webView = WKWebView(frame: view.frame, configuration: webViewCofig)

要启用特定数据检测器,请在设置dataDetectorTypes时将特定类型传递为.address,.link等:

config.dataDetectorTypes = [.address]