为什么这段代码不起作用?它显示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
只是扩展上一个答案.您需要通过设置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
加载URL操作以异步方式进行.它甚至在你的方法结束之后才开始.所以你的javascript被推入一个空的UIWebView,然后你的方法结束,然后加载发生.
你需要让你的方法在推入js之前结束.标准的方法是使用一个Delegate对象,当加载完成时会有一个调用它的方法.只有这样才能推进javascript.