2013-05-16 66 views
1

我一直在四處尋找,並發現大量的代碼進行自動填充,看起來像:自動填充的UIWebView

- (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,但是,當我去到web視圖,這些字段保持空白。任何線索爲什麼它不能填補?

如果有幫助,我試圖填補該網站是: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 

回答

0

您嘗試訪問http://sis.ocsarts.net該網站包含框架http://sis.ocsarts.net/login.asp

改變網頁視圖以改爲從該login.asp頁面加載。

我通過使用Chrome開發者控制檯發現了它,試圖在您提到的原始URL上執行javascript,只是爲了發現javascript函數以獲取輸入元素總是返回空數組。我甚至嘗試了getElementsByName,的getElementsByTagName等

確保網頁視圖的委託掛鉤,並試圖在JavaScript字符串合併爲一個:

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

嗯,有趣的想法,但仍然無法填補領域...你知道任何其他方式嗎? – Jackson

+0

我用http://sis.ocsarts.net/login.asp用你的代碼試過了,它工作正常。我也嘗試了以下函數:'NSString * loadUsernameJS = [NSString stringWithFormat:@「document.getElementsByTagName('input')[1] .value ='%@';」,savedUsername];' –

+0

也許你可以發佈完整的代碼在你的視圖控制器。 –