UIWebView stringByEvaluatingJavaScriptFromString第二次不起作用

时间:2014-07-05 04:13:50

标签: ios objective-c uiwebview

在UITableViewController中,我有一个带有stringByEvaluatingJavaScriptFromString的UIWebView,第一次正确加载。然后,视图控制器会在用户“关闭”时显示,然后可以再次请求。

- (void)viewDidLoad {
  textComments.delegate=self;
NSString *path =[[[NSBundle mainBundle] bundlePath]
               stringByAppendingString:@"/demo.html"];
[textComments loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]];
}

-(void)webViewDidFinishLoad:(UIWebView *)_textComments{
  NSString * html_string = [NSString stringWithFormat:@"document.getElementById('editor1').innerHTML='%@';"
                            , self.commentHTML];
  [_textComments stringByEvaluatingJavaScriptFromString:html_string];
  [_textComments stringByEvaluatingJavaScriptFromString:@"document.getElementById('editor1').focus();"];
}

demo.html是一个带有textarea的HTML文件:

<textarea cols="80" id="editor1" name="editor1" rows="8">Content goes
here. ERROR: innerHTML not replaced!</textarea>

我们的想法是将&lt; textarea&gt; 值替换为变量 self.commentHTML 的内容。

第一次加载表视图控制器时,可以正常使用 self.commentHTML 变量替换&lt; textarea&gt; 的值。

在用户CLOSE操作后,另一个 stringByEvaluatingJavaScriptFromString 碰巧获取innerHTML值并且它也能正常工作,然后我确保我关闭了UIWebView插座:

[textComments stopLoading];
[textComments removeFromSuperview];
textComments.delegate=nil;
self.textComments=nil;

到目前为止,这么好。 问题是,当用户再次启动View Controller时, UIWebView 会加载预先加载的 demo.html 内容,但JavaScript stringByEvaluatingJavaScriptFromString webViewDidFinishLoad没有发生。我已经确定正在触发 webViewDidFinishLoad 。我还确保 didFailLoadWithError 也没有被解雇。

有关为什么第二次触发View Controller的想法,还没有发生stringByEvaluatingJavaScriptFromString?

我想知道我是否必须销毁/解除/释放我在CLOSE时未设想的其他内容。

非常感谢您的帮助。

编辑以包含完整的demo.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>CKEditor</title>
    <meta content="text/html; charset=utf-8" http-equiv="content-type" />
    <script type="text/javascript" src="ckeditor.js"></script>
</head>
<body><p><textarea cols="80" id="editor1" name="editor1" rows="8">Content goes here. ERROR: innerHTML not replaced!</textarea></p>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

这里没有足够的代码可以肯定,但我的第一个猜测是这个序列创建了你的dom的两个独立元素<textarea id="editor1">并且javascript确实执行,但是将内容放入错误的textarea