Iphone 呼叫';行动';UIWebView中的HTML web表单

Iphone 呼叫';行动';UIWebView中的HTML web表单,iphone,Iphone,我试图跳过网站的登录页面,这样我就可以为用户提供一个更美观的登录页面,并保存他们的登录凭据,以便将来自动登录。到目前为止,我有两个UITextField和一个UIButton。用户输入用户名和密码,按UIWebView按钮后,他们的详细信息将输入到站点登录页面上的实际网络表单中,随后的“登录”页面将显示在UIWebView中。当应用程序让用户登录时,webView将被隐藏,然后在加载“登录”页面时显示 我已经设法填充了webform,但实际上无法提交它!我相信有一个非常简单的解决方案 这是我到目

我试图跳过网站的登录页面,这样我就可以为用户提供一个更美观的登录页面,并保存他们的登录凭据,以便将来自动登录。到目前为止,我有两个UITextField和一个UIButton。用户输入用户名和密码,按UIWebView按钮后,他们的详细信息将输入到站点登录页面上的实际网络表单中,随后的“登录”页面将显示在UIWebView中。当应用程序让用户登录时,webView将被隐藏,然后在加载“登录”页面时显示

我已经设法填充了webform,但实际上无法提交它!我相信有一个非常简单的解决方案

这是我到目前为止的代码,如果有更好的方法,请告诉我

-(IBAction)login:(id)sender
{   
    // Create js strings    
    NSString *loadUsernameJS = [NSString stringWithFormat:@"var username = document.getElementsByName('username')[0]; username.value='%@';", username.text];
    NSString *loadPasswordJS = [NSString stringWithFormat:@"var password = document.getElementsByName('password')[0]; password.value='%@';", password.text];    

    // Autofill the form - this works, and I can see the values being put into the webform
    [self.webView stringByEvaluatingJavaScriptFromString: loadUsernameJS];
    [self.webView stringByEvaluatingJavaScriptFromString: loadPasswordJS];

        // This is the method I have tried to submit the form, but nothing happens (ct100 is the ID of the form).

    [self.webView stringByEvaluatingJavaScriptFromString:@"document.ct100.submit();"];

}
尝试:

视图控制器需要实现
UIWebViewDelegate
协议,并将其自身设置为UIWebView的
代理。从
webView:shouldStartLoadWithRequest返回YES(请参见下面的代码)将允许web视图导航到表单提交到的任何url

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSLog(@"Allow navigation to request = %@", request);
    return YES;
}
尝试:

视图控制器需要实现
UIWebViewDelegate
协议,并将其自身设置为UIWebView的
代理。从
webView:shouldStartLoadWithRequest返回YES(请参见下面的代码)将允许web视图导航到表单提交到的任何url

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSLog(@"Allow navigation to request = %@", request);
    return YES;
}

下面的方法可能对您有所帮助

 Put this code  inside the didFinishLoading Method Of UIWebView Protocol
填写用户ID

 [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('username').value = 'userId'"];
 [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('password').value = 'password'"];
填写密码

 [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('username').value = 'userId'"];
 [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('password').value = 'password'"];
调用下面的提交按钮

    [webView 
stringByEvaluatingJavaScriptFromString:@"document.forms['login_form'].submit();"];
这里的
login\u form
是您表单的名称


注意:填写凭证后,单击提交按钮,您必须管理一件事。为了避免重复加载UIWebView,您需要制作一些BOOL或其他东西。

下面的方法可能会对您有所帮助

 Put this code  inside the didFinishLoading Method Of UIWebView Protocol
填写用户ID

 [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('username').value = 'userId'"];
 [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('password').value = 'password'"];
填写密码

 [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('username').value = 'userId'"];
 [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('password').value = 'password'"];
调用下面的提交按钮

    [webView 
stringByEvaluatingJavaScriptFromString:@"document.forms['login_form'].submit();"];
这里的
login\u form
是您表单的名称


注意:填写凭证后,单击提交按钮,您必须管理一件事。为了避免重复加载UIWebView,您需要进行一些BOOL或其他操作。

感谢Sanjit的回复,不幸的是仍然没有成功!我不知道这为什么不起作用。您是否在UIWebViewDelegate实现中实现了webView:shouldStartLoadWithRequest:navigationType:?您需要为指定的请求返回YES,以便web视图导航到submit url。我对此有点陌生,您是否介意更详细地解释一下对于特定请求,我将如何执行此操作?这就是我所做的。当页面第一次加载时,NSLog运行并打印请求(我在viewDidFinishLoad中有另一个NSLog来告诉我加载完成的时间。但是当我输入详细信息并单击“登录”按钮时,什么都没有发生。没有新的请求,这使我想到文档。getElementById(\“ct100\”)。submit()函数不起作用。有什么方法可以测试它吗?感谢您迄今为止的帮助!感谢您的回复Sanjit,不幸的是仍然没有运气!我不知道为什么这不起作用。您是否在UIWebViewDelegate实现中实现了webView:shouldStartLoadWithRequest:navigationType:吗?您需要为指定的代理返回YES请求,以便web视图导航到提交url。我对此有点陌生,您介意更详细地解释一下我如何处理特定请求吗?这就是我所做的。NSLog在页面首次加载时运行并打印请求(我在viewDidFinishLoad中有另一个NSLog来告诉我加载完成的时间。但是当我输入详细信息并单击“登录”按钮时,什么都没有发生。没有新的请求,这使我想到文档。getElementById(\“ct100\”)。submit()函数不起作用。有什么方法可以测试它吗?谢谢你一直以来的帮助!