Search code examples
javascriptcocoa-touchios6uiwebviewstringbyevaluatingjavascr

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.


Solution

  • 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.