5

Di solito, quando voglio caricare una stringa HTML in una WebView utilizzando JavaScript, io uso qualcosa di simile ...Caricamento stringa grande HTML in UIWebView utilizzando JavaScript

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

Anche se questo sembra funzionare bene per le piccole stringhe, non ha effetto quando la stringa è relativamente grande. Apparentemente, c'è un limite di lunghezza.

Quindi, la mia domanda qui è, se qualcuno sa di un modo per caricare una stringa di grandi dimensioni in un UIWebView senza dover ricaricare la webview?

AGGIORNAMENTO: Per essere un po 'chiaro, nel mio caso qui, la webview è già caricata, voglio solo sostituire il suo contenuto senza doverlo ricaricare, principalmente perché ricaricare la webview non è abbastanza veloce per il mio uso.

risposta

5

sono in grado di passare stringhe estremamente lunghe con stringByEvaluatingJavaScriptFromString, quindi dubito che questo è il problema. (Nota che sto scrivendo per osx, non ios che potrebbero fare la differenza)

Potrebbe essere che non si stia eseguendo correttamente l'html in modo che venga passato come javascript non valido, il che potrebbe non causare alcun risultato. Sto facendo quanto segue in una stringa prima di passarlo a 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 ]; 

Non so se tutto ciò che è necessario o uno potrebbe essere scritto più brevemente (Sono molto nuovo a Objective C), ma sembra funzionare bene per me.

+0

Questa è una buona risposta. Ti consiglio di aggiungere quanto segue per evitare le virgolette singole: [content stringByReplacingOccurrencesOfString: @ "\" "withString: @" \\\ '"]; – Willster

+0

Muoversi a provarlo di nuovo dopo molto tempo, sfuggire all'html in questo modo sembra farlo funzionare, almeno su iOS 8. –

1

Se il codice HTML è in un file, si potrebbe fare questo:

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

Se volete letteralmente caricare una stringa HTML, provate questo:

NSString *embedHTML = @"<html><head></head><body><p>Hello World</p></body></html>"; 
[webView loadHTMLString: embedHTML baseURL: nil]; 
+0

Grazie, ma entrambi questi approcci richiedono il caricamento/ricaricamento della visualizzazione Web, che non è abbastanza veloce per il mio utilizzo. –

+0

Se è il caso, penso che la tua unica opzione sia quella di fornire l'HTML alla WebView usando più chiamate a stringByEvaluatingJavaScriptFromString. Alimenta il contenuto in drip e gestiscilo a livello di codice nel JavaScript. – Axeva

Problemi correlati