5

を使用してのUIWebViewには...私はJavaScriptを使用してのWebViewにHTML文字列をロードするとき、私はこのようなものを使用し、通常のjavascript

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

を大HTML文字列をロードしますそれが比較的大きい文字列では効果がありません。明らかに、長さの制限があります。

私の質問は、webviewをリロードせずに大きな文字列をUIWebViewに読み込む方法を知っていれば、私の質問です。

アップデート:私の場合、ここではwebviewが既にロードされています。リロードする必要なくコンテンツを置き換えたいのですが、主にwebviewのリロードが十分速くないためです。 HTMLファイル内にある場合

答えて

5

を私が通過することができますよ非常に長い文字列はstringByEvaluatingJavaScriptFromStringとなるので、それが問題ではないかと思います。 (注:私はosxのために書いていますが、違いが出る可能性はありません)

あなたは正しくHTMLをエスケープしていない可能性がありますので、何も起こり得ない無効なjavascriptとして渡されている可能性があります。私はObjective Cのに非常に新しいです(私はそのすべてが必要であるかどうかを知りませんかのどちらか、それがより簡潔に書くことができ

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

:私はジャバスクリプトに渡す前に、文字列に次のことをやっています)、それは私のためにうまくいくようです。

+0

これは良い答えです。一重引用符をエスケープするには、次のように追加することをお勧めします。[content stringByReplacingOccurrencesOfString:@ "\ '" withString:@ "\\\'"]; – Willster

+0

このようにhtmlをエスケープすることは、少なくともiOS 8ではうまくいくと思われます。 –

1

、あなたがこれを行うことができます:

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

あなたは文字通り、HTML文字列をロードしたい場合は、これを試してみてください。

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

ありがとうございますが、どちらの方法でもWebビューの読み込み/読み込みが必要ですが、私の使用には十分速くありません。 –

+0

その場合、私はあなたの唯一の選択肢は、stringByEvaluatingJavaScriptFromStringへの複数の呼び出しを使用してWebViewにHTMLを供給することだと思います。コンテンツをドリップでフィードし、JavaScriptでプログラムで処理します。 – Axeva

関連する問題