5

通常,当我想使用 javascript 将 HTML 字符串加载到 webview 中时,我会使用这样的东西......

NSString *htmlString = @"HTML String";
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('elementid').innerHTML = \"%@\";", htmlString]];

虽然这似乎适用于小字符串,但当字符串相对较大时它没有效果。显然,有一个长度限制。

所以,我的问题是,如果有人知道将大字符串加载到 UIWebView 中而无需重新加载 webview 的方法?

更新:稍微清楚一点,在我的例子中,webview 已经加载,我只想替换它的内容而不必重新加载它,主要是因为重新加载 webview 对我的使用来说不够快。

4

2 回答 2

5

我能够传递极长的字符串stringByEvaluatingJavaScriptFromString,所以我怀疑这是问题所在。(注意我是为 osx 写的,而不是 ios,这可能会有所不同)

可能是您没有正确转义 html,因此它被作为无效的 javascript 传递,这可能不会导致任何事情发生。在将字符串传递给 javascript 之前,我正在对字符串执行以下操作:

content = [content stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
content = [content stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"];
content = [content stringByReplacingOccurrencesOfString:@"\r" withString:@""];
NSString *js = [NSString stringWithFormat:@"set_content(\"%@\")", content];
[ web_view stringByEvaluatingJavaScriptFromString: js ];

我不知道是否所有这些都是必要的,或者它可以写得更简洁(我对目标 c 很陌生),但它似乎对我来说很好。

于 2013-12-26T01:32:00.833 回答
1

如果 HTML 在文件中,您可以这样做:

NSString *path = [[NSBundle mainBundle] pathForResource: @"MyHTML" ofType: @"html"];
NSData *fileData = [NSData dataWithContentsOfFile: path];
[webView loadData: fileData MIMEType: @"text/html" textEncodingName: @"UTF-8" baseURL: [NSURL fileURLWithPath: path]];  

如果你真的想加载一个 HTML 字符串,试试这个:

NSString *embedHTML = @"<html><head></head><body><p>Hello World</p></body></html>";
[webView loadHTMLString: embedHTML baseURL: nil]; 
于 2013-05-09T18:02:00.907 回答