2014-02-05 47 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方法“申报”它