预先填写WebView文本字段
我需要预先填写UIWebView
文本字段,并给予理解, javascript
是最好的方式去做这件事。 不幸的是,我对javascript
一无所知,并且在过去的几个小时里一直在摸索,无处可去。
最新的拙劣尝试:
- (void)webViewDidFinishLoad:(UIWebView *)webView { // username field id = username_5 & pw field id = password_5 NSString *javascript = @"\ var user = 'testUser';\ var pw = 'testPW';\ document.getElementById('username_5').value = user; \ document.getElementById('password_5').value = pw; \ ;"; // Execute JS [_emailWebView stringByEvaluatingJavaScriptFromString:javascript]; }
任何人都可以指向正确的方向吗?
-编辑-
我也试过拖延电话,以防万一网页没有完全加载,如果我打电话像这样:
- (void)webViewDidFinishLoad:(UIWebView *)wv { [NSObject cancelPreviousPerformRequestsWithTarget:self]; [self performSelector:@selector(injectJavascript) withObject:nil afterDelay:1.0]; } - (void)injectJavascript { [self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('password_5').value = 'testPW';"]]; [self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.alert('test');"]]; }
出现警报,但是ID为password_5
的字段未填写。
有问题的字段嵌套在表单中。 不知道这是否有什么区别?
-EDIT 2-
我很确定这个问题是相关的目标网站上的HTML /嵌套,因为我刚刚在另一个网站上尝试过,它的工作。
目标站点是这样嵌套的:
<html> <head> … </head> <body onload="FinishLoad(1);hideJSWarn();"> <div id="noJSWarn" class="cssSecurityWarning" style="display: none;"> … </div> <table id="table_LoginPage_1" > … </table> <table id="table_LoginPage_2" > … </table> <blockquote> <form id="frmLogin_4" onsubmit="return Login(1)" autocomplete="off" method="POST" action="login.cgi" name="frmLogin"> <input id="tz_offset_5" type="hidden" name="tz_offset"></input> <table id="table_LoginPage_3" > <tbody> <tr> … <td valign="top"> <table id="table_LoginPage_6" > <tbody> <tr> <td> … </td> <td> <input id="username_5" type="text" size="20" name="username"></input>
我已经通过在Firefox中突出显示元素ID并select了inspect element
来获取元素ID。 原来,这给不同的ID给那些返回:
NSString *body = [self.emailWebView stringByEvaluatingJavaScriptFromString: @"document.getElementsByTagName('body')[0].outerHTML"]; NSLog(@"%@", body);
将这些ID(显然取决于用于导航到页面的变化)插入到:
[self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('username').value = '%@';", user]]; [self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('password').value = '%@';", pw]]; [self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('input_LoginPage-ipad_1').click();"]];
解决了它。
感谢所有的帮助人员。
你必须把javascript代码放在一个NSString中,然后用stringByEvaluatingJavaScriptFromString
执行。 代码如下所示:
[self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('email').value = '%@'", email]]; [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('pass').value = '%@'", password]];
使用这个代码这将工作
view.loadUrl("javascript:(function() { " + " document.getElementById('login').value = '" + emailAdress+ "';" + " document.getElementById('login').readOnly='true'" + "})();");
- 在iOS 4.0中,为什么UIScrollView zoomToRect:animated:在animation时不触发scrollViewDidScroll或scrollViewDidZoom委托?
- 处理ios设备方向
- XCode iO6:UIWebView从select照片返回后返回黑屏
- iOS 11search栏跳转到屏幕顶部
- Firebase在Swift中检索数据
- 在Mac上,Cordova命令行编译在/ tmp中失败
- 滚动时隐藏导航栏
- Swift:alignment顶部而不是中间的UILabel文本
- 使用AVCaptureVideoDataOutput和AVCaptureAudioDataOutput时的性能问题