Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Loading large HTML string into UIWebView using javascript

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.

like image 582
Sam J. Avatar asked May 09 '13 08:05

Sam J.


2 Answers

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.

like image 113
SColvin Avatar answered Oct 13 '22 02:10

SColvin


If the HTML is in a file, you could do this:

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]];  

If you literally want to load an HTML string, try this:

NSString *embedHTML = @"<html><head></head><body><p>Hello World</p></body></html>";
[webView loadHTMLString: embedHTML baseURL: nil]; 
like image 20
Axeva Avatar answered Oct 13 '22 03:10

Axeva