我正在爲我的學校開發iOS應用程序,該程序允許用戶訪問學校文檔,如日程安排,日曆和成績/學費網站。我一直在研究如何爲需要登錄的一些網站保存憑證,我的最終目標不僅是保存憑證,還會在加載webview時自動登錄用戶到網站。到目前爲止,我的代碼如下所示:如何從iOS Webview登錄網站?
#import "PJP Webview.h"
@implementation PJP_Webview
@synthesize webView, loginView, username, password, body, urlToLink,usernameField,passwordField, firstTime, loginNeeded, callerCell;
-(void) viewDidLoad {
[super viewDidLoad];
loginView.hidden = true;
if (firstTime && loginNeeded) {
loginView.hidden = false;
[self.view bringSubviewToFront:loginView];
}
else {
loginView.hidden = true;
[self.view addSubview:self.webView];
[self.view bringSubviewToFront:webView];
if (loginNeeded) {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *usernameSave = [NSString stringWithFormat:@"%@username", self.callerCell];
self.username = [userDefaults objectForKey:usernameSave];
NSString *passwordSave = [NSString stringWithFormat:@"%@password", self.callerCell];
self.password = [userDefaults objectForKey:passwordSave];
NSURL *url = [NSURL URLWithString: urlToLink];
NSString *bodyForUse = [NSString stringWithFormat: body, username, password];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL: url];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: [bodyForUse dataUsingEncoding: NSUTF8StringEncoding]];
[webView loadRequest: request];
}
else {
NSURL *url = [NSURL URLWithString: urlToLink];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
}
}
}
- (IBAction)acceptInput:(id)sender {
self.username = usernameField.text;
self.password = passwordField.text;
loginView.hidden = true;
[self.view addSubview:self.webView];
[self.view bringSubviewToFront:webView];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *usernameSave = [NSString stringWithFormat:@"%@username", self.callerCell];
[userDefaults setObject:username forKey:usernameSave];
NSString *passwordSave = [NSString stringWithFormat:@"%@password", self.callerCell];
[userDefaults setObject:password forKey:passwordSave];
[userDefaults synchronize];
NSURL *url = [NSURL URLWithString: urlToLink];
NSString *bodyForUse = [NSString stringWithFormat: body, username, password];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL: url];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: [bodyForUse dataUsingEncoding: NSUTF8StringEncoding]];
[webView loadRequest: request];
}
@end
我模仿我的一些代碼後,發現這裏Loading a webpage through UIWebView with POST parameters
我試圖整合網站之一的例子的又一個堆棧溢出文章是https://adphila.gradeconnect.com/front/slogin.php
到目前爲止,我的代碼並未成功登錄到網站並帶我進入下一頁,所以我不確定如果我使用的參數是錯誤的,如果我的代碼有問題,或者某些存在其他問題。另外,如果您對如何使我以前的代碼更高效有任何建議,我也歡迎!
編輯:學校也使用gmail作爲學生電子郵件,那麼是否可以嵌入uiwebview的電子郵件內容呢?我知道Google有自己的API,但我以前從未使用過非Apple庫。
編輯2:
#import "PJP Webview.h"
@implementation PJP_Webview
@synthesize webViewCurrent, loginView, username, password, bodyUsername, bodyPassword, urlToLink,usernameField,passwordField, firstTime, loginNeeded, callerCell, bodyButton;
-(void) viewDidLoad {
[super viewDidLoad];
[webViewCurrent setDelegate:self];
loginView.hidden = true;
if (firstTime && loginNeeded) {
loginView.hidden = false;
[self.view bringSubviewToFront:loginView];
}
else {
loginView.hidden = true;
if (loginNeeded) {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *usernameSave = [NSString stringWithFormat:@"%@username", self.callerCell];
self.username = [userDefaults objectForKey:usernameSave];
NSString *passwordSave = [NSString stringWithFormat:@"%@password", self.callerCell];
self.password = [userDefaults objectForKey:passwordSave];
NSURL *url = [NSURL URLWithString: urlToLink];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webViewCurrent loadRequest:request];
}
else {
NSURL *url = [NSURL URLWithString: urlToLink];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webViewCurrent loadRequest:request];
}
[self.view addSubview:self.webViewCurrent];
[self.view bringSubviewToFront:webViewCurrent];
}
}
- (IBAction)acceptInput:(id)sender {
self.username = usernameField.text;
self.password = passwordField.text;
loginView.hidden = true;
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *usernameSave = [NSString stringWithFormat:@"%@username", self.callerCell];
[userDefaults setObject:username forKey:usernameSave];
NSString *passwordSave = [NSString stringWithFormat:@"%@password", self.callerCell];
[userDefaults setObject:password forKey:passwordSave];
[userDefaults synchronize];
NSURL *url = [NSURL URLWithString: urlToLink];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webViewCurrent loadRequest:request];
[self.view addSubview:self.webViewCurrent];
[self.view bringSubviewToFront:webViewCurrent];
}
-(void) webViewDidFinishLoad:(UIWebView *)webView {
NSString *fillData = [NSString stringWithFormat:@"document.getElementById('%@').value = '%@';document.getElementById('%@').value = '%@';", bodyUsername, username, bodyPassword, password];
[webView stringByEvaluatingJavaScriptFromString:fillData];
NSString *buttonData = [NSString stringWithFormat:@"document.getElementById('%@').click()", bodyButton];
[webView stringByEvaluatingJavaScriptFromString:buttonData];
}
@end
有一個新的錯誤,雖然,無效SendDelegateMessage(NSInvocation的*):代表(web視圖:didFinishLoadForFrame :)失敗在等待10秒後返回。主循環模式:kCFRunLoopDefaultMode
對於我使用的網站,bodyUsername是lusername,bodyPassword lpassword和bodyButton登錄名。頁面加載但不執行JavaScript。
我更新了我的代碼以包含此代碼。現在我有錯誤:void SendDelegateMessage(NSInvocation *):委託(webView:didFinishLoadForFrame :)等待10秒後未能返回。主運行循環模式:kCFRunLoopDefaultMode – SharkbaitWhohaha
您能否檢查上述更新? – SharkbaitWhohaha
這個錯誤是由於JavaScript代碼引起的。實際上,對於每個條目,JavaScript執行時間固定爲10秒。如果您的代碼執行超過10秒,則webview將停止執行腳本......這就是爲什麼您會收到此錯誤。 – Nilesh