Loading large HTML string into UIWebView using javascript

Sam J. picture Sam J. · May 9, 2013 · Viewed 7.6k times · Source

Usually, when I want to load an HTML string into a webview using javascript, I use something like this...

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

While this appears to work well for small strings, it has no effect when the string it relatively large. Apparently, there is a length limit.

So, my question here is, if anyone knows of a way to load a large string into a UIWebView without having to reload the webview?

UPDATE: To be a little clear, in my case here, the webview is already loaded, I just want to replace it's content without having to reload it, mainly because reloading the webview is not fast enough for my use.

Answer

SColvin picture SColvin · Dec 26, 2013

I'm able to pass extremely long strings with stringByEvaluatingJavaScriptFromString, so I doubt that is the problem. (Note I'm writing for osx, not ios which might make a difference)

It might be that your are not escaping the html correctly so it's being passed as invalid javascript, which could cause nothing to happen. I'm doing the following to a string before passing it to 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 ];

I don't know if all of that is necessary or either it could be written more succinctly (I'm very new to objective c), but it seems to work fine for me.