我宣布我的应用程序(富文本编辑器)能够打开任何RTF文件(例如,来自电子邮件附件)。当用户选择附件时,应用程序委托将“loadContent:(NSURL *)url”消息发送到UiwebView控制器。在接收器中,我获取URL并使用
在UIWebView中加载RTF文件- (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>
myWebView的HTML内容 BEFORE 我加载了rtf文件......
你知道发生了什么吗?为什么 dum 显示以前的代码,因为显示的myWebView会显示新代码?是因为loadRequest是在一个单独的线程中执行的,而且当执行下一条指令时,myWebView仍然包含以前的代码?
由于
[编辑]我还尝试在webViewDidFinishLoad:delegate方法中使用NSLog weblog的内容,但得到相同的结果:在打开RTF附件文件之前,此webView的内容。是否可以以同步方式发出加载请求?
答案 0 :(得分:2)
这是因为loadRequest是异步的。在尝试NSLog之前,您需要等待负载完成。看一下UIWebViewDelegate文档。在webViewDidFinishLoad内部/之后尝试NSLog:你应该得到更好的结果。