5

Zazwyczaj, gdy chcę załadować ciąg HTML do WebView przy użyciu javascript, używam coś takiego ...Ładowanie duży ciąg HTML do UIWebView przy użyciu javascript

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

Choć to wydaje się działać dobrze dla małych ciągi, nie ma żadnego wpływu, gdy sznur jest stosunkowo duży. Wygląda na to, że istnieje ograniczenie długości.

Moje pytanie brzmi: czy ktoś wie, jak załadować duży ciąg do UIWebView bez konieczności ponownego ładowania widoku WWW?

AKTUALIZACJA: Aby było trochę czysto, w moim przypadku tutaj, przeglądarka internetowa jest już załadowana, po prostu chcę ją zastąpić bez konieczności jej ponownego ładowania, głównie dlatego, że ponowne załadowanie widoku nie jest wystarczająco szybkie, aby można było z niego korzystać.

Odpowiedz

5

jestem w stanie przekazać wyjątkowo długie struny z stringByEvaluatingJavaScriptFromString, więc wątpię, że to jest problem. (Uwaga, piszę dla osx, a nie dla ios, co może mieć znaczenie)

Możliwe, że nie są one poprawnie usuwane z HTML, więc są przekazywane jako nieprawidłowe javascript, co może spowodować, że nic się nie wydarzy. Robię co następuje na ciąg przed przekazaniem go do 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 ]; 

ja nie wiem, czy to wszystko jest konieczne, czy też może to być napisane bardziej zwięźle (jestem bardzo nowy w Objective C), ale wydaje mi się, że działa dobrze.

+0

To jest dobra odpowiedź. W celu uniknięcia pojedynczych cudzysłowów polecam dodanie następujących elementów: [content stringByReplacingOccurrencesOfString: @ "\ '" withString: @ "\\\'"]; – Willster

+0

Znów próbuję tego ponownie po długim czasie, ucieczka html w ten sposób sprawia, że ​​działa, przynajmniej na iOS 8. –

1

Jeżeli HTML jest w pliku, można to zrobić:

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

Jeżeli chcieliby załadować ciąg HTML, spróbuj tego:

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

Dzięki, ale obie te metody wymagają załadowania/ponownego załadowania strony internetowej, która nie jest wystarczająco szybka dla mojego użytku. –

+0

Jeśli tak jest, to myślę, że jedyną opcją jest podawanie kodu HTML do WebView za pomocą wielu wywołań do stringByEvaluatingJavaScriptFromString. Nakarm zawartość w kroplach i programowo obsłuż ją w JavaScript. – Axeva

Powiązane problemy