1

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

    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

4 回答 4

6

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

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

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

于 2016-07-04T09:55:27.027 回答
3

这通常是因为CSS用于渲染网页。这是本地加载页面时的默认行为。我们也可以考虑在第一次加载时,UIWebview没有缓存到这个页面并为那个页面创建缓存。

为了让它有点快尝试从文件加载页面,例如

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"filePath" ofType:@"html" inDirectory:@"."]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];

CSS喜欢body { background-color:transparent; font-family:Arial-BoldMT; font-size:18;}也增加加载页面的时间。

于 2013-08-16T12:35:30.810 回答
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];

上面链接 rel 指向的本地 URL 使加载时间变得更糟。

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

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

于 2013-12-14T14:15:10.337 回答
-1

在这种情况下WKWebView,禁用 WKWebView 的数据检测器对我有用。斯威夫特版本:

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

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

config.dataDetectorTypes = [.address]
于 2020-04-17T12:36:48.243 回答