我正在尝试从字符串加载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上运行它,并且第一次加载它总是需要几秒钟。有谁知道为什么会这样,以及如何解决这个问题?
答案 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]