自动填充 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的主要内容,如果未能解决你的问题,请参考以下文章