2014-02-05 73 views
1

我看了很多來自蘋果的文檔,但我仍然無法理解如何在webview中實現我的javascript功能的一般想法。如何將javascript注入到uiwebview中

我有一個網址:https://mobilemy.umd.edu/portal/server.pt/gateway/PTARGS_0_340574_368_211_0_43/https%3B/www.sis.umd.edu/testudo/studentSched?term=201401

我想用JavaScript來填寫表格(用戶名和密碼),並提交表單。

在控制檯中,我一直在使用這個腳本:

javascript:(function() { 
    document.lform.in_tx_username.value='username'; 
    document.lform.in_pw_userpass.value='password'; 
    doLogin(); 
    })() 

的OBJ-C代碼看起來是這樣的:

loginScript = @"function() {document.lform.in_tx_username.value='username'; 
    document.lform.in_pw_userpass.value='password'; 
    doLogin();}"; 
[_visibleWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:scheduleURL]]]; 
[_visibleWebView stringByEvaluatingJavaScriptFromString:loginScript]; 

其中scheduleUrl是我上面鏈接的URL。 我對Obj-C和JS都很新穎,所以任何幫助/提示將不勝感激。

回答

1

當您運行stringByEvaluatingJavaScriptFromString時,您正在頁面/ HTML上運行javascript。你傳遞一個函數,當它被評估時什麼都不會做,因爲這個函數不會被調用。只要運行的JavaScript本身就像這樣:

loginScript = @"document.lform.in_tx_username.value='username'; 
    document.lform.in_pw_userpass.value='password'; 
    doLogin();"; 

這個JavaScript將得到的頁面,而不是在執行的只是被驗證

+0

我仍然調用stringbyevaluating:功能? – CoderNinja

+0

@CoderNinja是這就是你如何將它傳遞到webview中,問題是你傳遞的是需要被調用的函數而不是可執行代碼 –

0

您可以嘗試執行代碼時的WebView加載完成:

加載請求:

_visibleWebView = self; 
[_visibleWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:scheduleURL]]]; 

然後注入的JavaScript調用:

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

    loginScript = @"function() {document.lform.in_tx_username.value='username'; 
    document.lform.in_pw_userpass.value='password'; 
    doLogin();}"; 

    [_visibleWebView stringByEvaluatingJavaScriptFromString:loginScript]; 

} 

編輯

西蒙·麥克洛克林說, 你也必須調用不僅JavaScript方法「申報」它