Reputation: 685
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.
Upvotes: 5
Views: 7578
Reputation: 13289
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.
Upvotes: 5
Reputation: 4737
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];
Upvotes: 1