【问题标题】:How to inject javascript into uiwebview如何将javascript注入uiwebview
【发布时间】:2014-02-05 16:45:12
【问题描述】:

我查看了很多来自苹果的文档,但我似乎仍然无法掌握如何在 webview 中实现我的 javascript 函数的总体思路。

我有一个网址: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 都很陌生,所以任何帮助/提示将不胜感激。

【问题讨论】:

    标签: javascript objective-c uiwebview


    【解决方案1】:

    当您运行stringByEvaluatingJavaScriptFromString 时,您正在页面/HTML 上运行javascript。您正在传递一个函数,该函数在评估时不会执行任何操作,因为该函数不会在任何地方被调用。只需像这样运行 javascript 本身:

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

    这个 javascript 将在页面上执行,而不是仅仅被验证

    【讨论】:

    • 我是否仍然通过评估来调用字符串:函数?
    • @CoderNinja 是的,这就是你将它传递到 webview 的方式,问题是你传递的是一个需要调用的函数而不是可执行代码
    【解决方案2】:

    您可以尝试在 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];
    
    }
    

    编辑

    正如 Simon McLoughlin 所说, 您还必须调用 javascript 方法,而不仅仅是“声明”它

    【讨论】:

      猜你喜欢
      • 2017-06-10
      • 2011-11-10
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多