自动填充 UIWebView

Posted

技术标签:

【中文标题】自动填充 UIWebView【英文标题】:Autofill UIWebView 【发布时间】:2013-05-16 05:20:49 【问题描述】:

我一直在环顾四周,发现了很多用于自动填充的代码,如下所示:

 - (void)webViewDidFinishLoad:(UIWebView *)webView

//For Authentication
NSString *savedUsername = @"Bapu";
NSString *savedPassword = @"Bapu123";

if (savedUsername.length != 0 && savedPassword.length != 0)

    //create js strings
    NSString *loadUsernameJS = [NSString stringWithFormat:@"var inputFields = document.querySelectorAll(\"input[type='text']\"); \
                                for (var i = inputFields.length >>> 0; i--;)  inputFields[i].value = '%@';", savedUsername];
    NSString *loadPasswordJS = [NSString stringWithFormat:@"var inputFields = document.querySelectorAll(\"input[type='password']\"); \
                                for (var i = inputFields.length >>> 0; i--;)  inputFields[i].value = '%@';", savedPassword];

    //autofill the form
    [webView stringByEvaluatingjavascriptFromString: loadUsernameJS];
    [webView stringByEvaluatingJavaScriptFromString: loadPasswordJS];


这就是我的 .m 文件中的内容,但是,当我转到 webView 时,这些字段仍然是空白的。关于它为什么不能填充的任何线索?

如果有帮助,我要填写的网站是:sis.ocsarts.net,相关代码是:

input type="text" size="20" name="UserName" value=""  onkeydown="if (event.keyCode==13)  document.frmLogin.submit(); return false; ;"

input type="password" size="20" name="Password"  onkeydown="if (event.keyCode==13)  document.frmLogin.submit(); return false; ;"

我的 FirstViewController.m 的完整代码是:

//
//  FirstViewController.m
//  OCSA
//
//  Created by Jack Kearl on 4/1/13.
//  Copyright (c) 2013 Jack Kearl. All rights reserved.
//

#import "FirstViewController.h"

@interface FirstViewController ()

@end

@implementation FirstViewController

@synthesize Aeries;

- (void)viewDidLoad
  
  [super viewDidLoad];
  [Aeries loadRequest:[NSURLRequest requestWithURL:
  [NSURL URLWithString:@"http://sis.ocsarts.net/login.asp"]]];

  

 - (void)webViewDidFinishLoad:(UIWebView *)webView
 
//For Authentication
NSString *savedUsername = @"Bapu";
NSString *savedPassword = @"Bapu123";

if (savedUsername.length != 0 && savedPassword.length != 0)

    //create js strings
    NSString *loadUsernameJS = [NSString stringWithFormat:@"var inputFields = document.querySelectorAll(\"input[type='text']\"); \
                                for (var i = inputFields.length >>> 0; i--;)  inputFields[i].value = '%@';", savedUsername];
    NSString *loadPasswordJS = [NSString stringWithFormat:@"var inputFields = document.querySelectorAll(\"input[type='password']\"); \
                                for (var i = inputFields.length >>> 0; i--;)  inputFields[i].value = '%@';", savedPassword];

    //autofill the form
    [webView stringByEvaluatingJavaScriptFromString: loadUsernameJS];
    [webView stringByEvaluatingJavaScriptFromString: loadPasswordJS];




- (void)didReceiveMemoryWarning

[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.


@end

【问题讨论】:

【参考方案1】:

您尝试访问http://sis.ocsarts.net 的网站包含http://sis.ocsarts.net/login.asp 的框架。

改为从该 login.asp 页面加载 Web 视图。

我是通过使用 Chrome 开发者控制台发现的,试图在你提到的原始 URL 上执行 javascript,只是为了发现获取输入元素的 javascript 函数总是返回空数组。我什至尝试了 getElementsByName、getElementsByTagName 等。

确保 webview 委托已链接并尝试将 javascript 字符串合并为一个:

NSString *loadUsernameAndPasswordJS = [NSString stringWithFormat:@"document.getElementsByTagName('input')[1].value = '%@';document.getElementsByTagName('input')[2].value = '%@';", savedUsername, savedPassword];

【讨论】:

嗯,有趣的想法,但仍然无法填补这些领域......你知道其他方法吗? 我用sis.ocsarts.net/login.asp 用你的代码试了一下,效果很好。我还尝试了以下功能:NSString *loadUsernameJS = [NSString stringWithFormat:@"document.getElementsByTagName('input')[1].value = '%@';", savedUsername]; 这对我也不起作用。也许代码中的其他地方有问题。我上传了它,你介意我快速浏览一下吗?感谢您的帮助。 我更新了我的答案。尝试使用它并确保您的 webview 委托链接到它的视图控制器。 天哪,这行得通!抱歉,如果这一切都是一个愚蠢的问题,我是一个完全自学编程的新手,我没有添加委托设置。但是非常感谢!

以上是关于自动填充 UIWebView的主要内容,如果未能解决你的问题,请参考以下文章

UIWebview 删除填充/边距

在 UIViewController 上动态创建 UIWebView

华为自动填充怎么设置

如何让Excel自动编号及序号自动填充

谷歌自动填充问题???

华为怎么设置验证码自动填充