我声明我的应用程序(富文本编辑器)能够打开任何 RTF 文件(例如,来自电子邮件附件)。当用户选择附件时,应用程序委托向 UiwebView 控制器发送“loadContent: (NSURL *) url”消息。在接收器中,我获取 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>
在我加载 rtf 文件之前,这是 myWebView 的 HTML 内容...
你知道发生了什么吗?为什么dum显示以前的代码,而显示的 myWebView 显示的是新的?是不是因为loadRequest是在单独的线程中执行的,在执行下一条指令时,myWebView还包含之前的代码?
谢谢
[编辑] 我也尝试在 webViewDidFinishLoad: 委托方法中对 webView 的内容进行 NSLog 记录,但得到相同的结果:在我打开 RTF 附件文件之前这个 webView 的内容。是否可以以同步方式发出加载请求?