5

Thông thường, khi tôi muốn tải một chuỗi HTML sang một webview sử dụng javascript, tôi sử dụng một cái gì đó như thế này ...tải HTML lớn chuỗi thành UIWebView sử dụng javascript

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

Trong khi điều này dường như làm việc tốt cho nhỏ chuỗi, nó không có hiệu lực khi chuỗi nó tương đối lớn. Rõ ràng, có một giới hạn độ dài.

Vì vậy, câu hỏi của tôi ở đây là, nếu có ai biết cách tải chuỗi lớn vào UIWebView mà không phải tải lại chế độ xem web?

CẬP NHẬT: Để rõ ràng, trong trường hợp của tôi ở đây, webview đã được tải, tôi chỉ muốn thay thế nội dung đó mà không phải tải lại, chủ yếu vì tải lại chế độ xem web không đủ nhanh để tôi sử dụng.

Trả lời

5

tôi có thể vượt qua các chuỗi cực dài với stringByEvaluatingJavaScriptFromString, vì vậy tôi nghi ngờ đó là vấn đề. (Lưu ý tôi đang viết cho osx, không phải ios có thể tạo sự khác biệt)

Có thể là bạn không thoát html chính xác để nó được chuyển thành javascript không hợp lệ, điều này có thể không xảy ra. Tôi đang làm như sau với một chuỗi trước khi chuyển nó đến 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 ]; 

Tôi không biết tất cả những điều đó là cần thiết hoặc có thể viết gọn gàng hơn (tôi rất mới với mục tiêu c), nhưng nó có vẻ tốt cho tôi.

+0

Đây là câu trả lời hay. Tôi khuyên bạn nên thêm thông tin sau để thoát khỏi các dấu nháy đơn: [content stringByReplacingOccurrencesOfString: @ "\ '" withString: @ "\\\'"]; – Willster

+0

Bắt đầu thử lại điều này sau một thời gian dài, thoát khỏi html theo cách này dường như làm cho nó hoạt động, ít nhất là trên iOS 8. –

1

Nếu HTML đang ở trong một tập tin, bạn có thể làm điều này:

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

Nếu bạn có nghĩa là muốn tải một chuỗi HTML, hãy thử này:

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

Cảm ơn, nhưng, cả hai cách tiếp cận này đều yêu cầu tải/tải lại chế độ xem web, điều này không đủ nhanh để tôi sử dụng. –

+0

Nếu đó là trường hợp tôi nghĩ rằng tùy chọn duy nhất của bạn là để cung cấp HTML cho WebView bằng cách sử dụng nhiều cuộc gọi đến stringByEvaluatingJavaScriptFromString. Cung cấp nội dung trong các tệp nhỏ giọt và xử lý nội dung theo chương trình trong JavaScript. – Axeva

Các vấn đề liên quan