当前位置:  开发笔记 > 编程语言 > 正文

UIWebView - stringByEvaluatingJavaScriptFromString - 不更改文本框值

如何解决《UIWebView-stringByEvaluatingJavaScriptFromString-不更改文本框值》经验,为你挑选了2个好方法。

为什么这段代码不起作用?它显示Google屏幕,但不会更改文本框值.我确认JS通过在Safari中运行它可以工作,并且这个代码似乎工作,否则因为运行alert('hi')确实有效.

NSURL *web_url = [NSURL URLWithString:@"http://www.google.com"];
NSURLRequest *web_request = [NSURLRequest requestWithURL:web_url];
[web_screen loadRequest:web_request];
NSString *js_result = [web_screen stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('input')[1].value='test';"];

Dino.. 10

只是扩展上一个答案.您需要通过设置UIWebView的delegate属性来符合UIWebViewDelegate协议,如下所示:


 web_screen.delegate = self;

然后,您可以实现其中一个委托方法,以了解请求何时完成加载,因此可以让脚本像这样运行:


 - (void)webViewDidFinishLoad:(UIWebView *)webView {
  NSString *js_result = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('input')[1].value='test';"];
 }

有关UIWebViewDelegate协议的更多信息,请访问Apple站点http://developer.apple.com/library/ios/#documentation/uikit/reference/UIWebViewDelegate_Protocol/Reference/Reference.html



1> Dino..:

只是扩展上一个答案.您需要通过设置UIWebView的delegate属性来符合UIWebViewDelegate协议,如下所示:


 web_screen.delegate = self;

然后,您可以实现其中一个委托方法,以了解请求何时完成加载,因此可以让脚本像这样运行:


 - (void)webViewDidFinishLoad:(UIWebView *)webView {
  NSString *js_result = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('input')[1].value='test';"];
 }

有关UIWebViewDelegate协议的更多信息,请访问Apple站点http://developer.apple.com/library/ios/#documentation/uikit/reference/UIWebViewDelegate_Protocol/Reference/Reference.html



2> 小智..:

加载URL操作以异步方式进行.它甚至在你的方法结束之后才开始.所以你的javascript被推入一个空的UIWebView,然后你的方法结束,然后加载发生.

你需要让你的方法在推入js之前结束.标准的方法是使用一个Delegate对象,当加载完成时会有一个调用它的方法.只有这样才能推进javascript.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有