私は自分のアプリ (リッチ テキスト エディター) が (電子メールの添付ファイルなどから) 任意の RTF ファイルを開くことができると宣言しました。ユーザーが添付ファイルを選択すると、アプリケーション デリゲートは「loadContent: (NSURL *) url」メッセージを UiwebView コントローラーに送信します。レシーバーで、URL を取得し、RTF ファイルを UIWebView にロードします。
- (void) loadContent: (NSURL *) passedURL
{
if (passedURL) {
[self.myWebView loadRequest:[NSURLRequest requestWithURL:passedURL]];
} else {
NSBundle *bundle = [NSBundle mainBundle];
NSURL *indexFileURL = [bundle URLForResource:@"index" withExtension:@"html"];
[self.myWebView loadRequest:[NSURLRequest requestWithURL:indexFileURL]];
}
}
そうすれば、すべてうまくいき、「myWebView」はRTFファイルの内容を表示します。問題は、このビューのコンテンツを編集可能にする必要があり、コードには「index.html」バンドル ファイルに含まれている JavaScript を含める必要があることです。アプリ起動時に読み込みます。そこで、RTF ファイルから作成された HTML コードを抽出するコードを追加して、後で完全なコードを再作成できるようにし、抽出したコードを次のようなタグに挿入します。
<div id="content" contenteditable="true"> imported html from rtf should be there</div>
それを取得するために loadContent メソッドを変更しました。
- (void) loadContent: (NSURL *) passedURL
{
if (passedURL) {
[self.myWebView loadRequest:[NSURLRequest requestWithURL:passedURL]];
NSString *dum=[self.myWebView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML;"];
NSLog(@"%@",dum);
} else {
NSBundle *bundle = [NSBundle mainBundle];
NSURL *indexFileURL = [bundle URLForResource:@"index" withExtension:@"html"];
[self.myWebView loadRequest:[NSURLRequest requestWithURL:indexFileURL]];
}
}
NSLog の結果を見ると、次の html しか得られません
<div id="content" contenteditable="true">Hello folks</div>
rtfファイルをロードする前のmyWebViewのHTMLコンテンツはどれでしたか...
何が起こっているのか分かりますか?表示された myWebView が新しいコードを表示するのに、dumが以前のコードを表示するのはなぜですか? loadRequest が別のスレッドで実行され、次の命令を実行するときに myWebView に以前のコードが含まれているためですか?
ありがとう
[編集] また、webViewDidFinishLoad: デリゲート メソッドで webView のコンテンツを NSLog しようとしましたが、同じ結果が得られました: RTF 添付ファイルを開く前のこの webView のコンテンツです。同期的にロード要求を行うことはできますか?