2013-04-01 144 views
1

我有一個自動填充用戶名和密碼的UIWebview。現在,我需要的僅僅是讓webview自動提交,就好像用戶按下了登錄按鈕一樣。無論如何,以編程方式將此函數調用到webview?順便說一句,如果這有幫助的話,我使用hotmail作爲網站。iPhone SDK:以編程方式提交UIWebview

+0

http://stackoverflow.com/questions/11201110/html-5-ios-creating-hybrid-applications試試這個。 – MasterBeta

回答

3

要使表單被提交,你需要做的是執行一段JavaScript代碼,它發現提交按鈕的DOM元素,然後調用click()方法。

我不知道hotmail登錄頁面的結構,但如果在提交按鈕上有一個id屬性,則可以使用document.getElementById(...)來檢索它。否則,您可能需要編寫代碼來查看所有輸入元素以找到type =「submit」的代碼。

在簡單的情況下,我們假設提交按鈕的ID爲「submit_button」。然後在你的目標C代碼,你將有以下:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSString *code = @"document.getElementById('submit_button').click()"; 
    [webView stringByEvaluatingJavaScriptFromString: code] 
} 

如果你需要做任何事情更復雜,您可以更改代碼字符串的內容。這只是在頁面上下文中運行的JavaScript代碼。

雖然暫時回過頭來,但我建議你考慮一個更可靠的方法來做到這一點。 Hotmail的登錄頁面可能隨時發生變化,如果您的應用程序改變了提交按鈕的工作方式,則會中斷您的應用程序。給它一個不同的名字,或者使用其他一些檢測輸入的方法(比如一個javascript onclick handler)。一般來說,依靠應用中某個網站的特定HTML結構可能會導致問題 - 如果可以的話,最好使用Web服務(例如REST)樣式的API(如果提供了該API)。

+0

我發現按鈕ID中的外觀登錄是:idSIButton9。所以,我做了這段代碼:NSString * loadWebsiteJS = @「document.getElementByID('idSIButton9')。click()」; [self.eMailTab3 stringByEvaluatingJavaScriptFromString:loadWebsiteJS]; 其中eMailTab3是webview。然而,這不起作用,我不知道爲什麼。是否假定進入click()括號?他們的目的是什麼?我也嘗試使用「提交」登錄按鈕的類型,但這也不起作用。我不確定最新錯誤,但感謝您的時間:) – mrprogrammer

+0

將以下javascript代碼包裝在一起: 'try {...} catch(e){e; }' 如果引發異常,將返回錯誤消息。我這樣做是爲了使用這種方法在UIWebView中執行的所有JavaScript代碼。 –

-2

Web視圖並不意味着爲您調用函數。它只會幫助你以指定的格式顯示你的頁面內容。登錄或任何其他此類功能應在您的網站代碼的後端以編程方式處理。這就是我可以說的。

0

在Web視圖中加載的網頁內容應該包含提交頁面的JavaScript。在您的WebViewController中執行webViewDidFinishLoad: &致電stringByEvaluatingJavaScriptFromString:@"yourJavascriptSubmitMethodCall()" 我遠離mac/xcode。值得嘗試。

+0

我不確定如何實現該方法。我已經在webViewDidFinishLoad中使用了我的函數,這就是使用我的代碼的方式: NSString * savedUsername = @「[email protected]」; NSString * loadUsernameJS = [NSString stringWithFormat:@「var inputFields = document.querySelectorAll(\」input [type ='email'] \「); \ for(var i = inputFields.length >>> 0; i-- ;){inputFields [i] .value ='%@';}「,savedUsername]; [eMailTab3 stringByEvaluatingJavaScriptFromString:loadUsernameJS]; 如何在那裏包含該功能? – mrprogrammer

0

您可以搜索webview的提交按鈕,然後點擊第一個。 它應該在很多情況下工作。

- (void)clickOnSubmitButtonForWebView:(UIWebView *)webView { 

    NSString *performSubmitJS = @"var passFields = document.querySelectorAll(\"input[type='submit']\"); \ 
    passFields[0].click()"; 
    [webView stringByEvaluatingJavaScriptFromString:performSubmitJS]; 

} 
相關問題