【问题标题】:Inject JavaScript for use on a site?注入 JavaScript 以在网站上使用?
【发布时间】:2013-03-23 00:11:47
【问题描述】:

我对 iOS 编程的整个 Web 方面完全陌生,所以请耐心等待:P。我的目标是从网站上获取一个 JavaScript 文件,然后“注入”该脚本,以便我可以使用它登录另一个网站。我不确定我的做法是否是“最好的”,所以如果你发现他们有不好的地方,请告诉我! :D

因此,在我的应用程序中,我们从一个视图开始,其中用户有两个文本框和一个提交按钮。一个用于用户名的文本框,一个用于密码的文本框。当用户点击提交时,我想加载页面,将输入的用户名和密码放在 HTML 页面上的正确位置!

- (IBAction)signInTouched:(id)sender {

    if (userName.text.length > 0 && pass.text.length > 0)
    {
        NSString *theSite = @"www.thesite.com";

        NSURL *theURL = [NSURL URLWithString:theSite];
        NSURLRequest *loginRequest = [[NSURLRequest alloc] initWithURL:theURL];

        [webView loadRequest:loginRequest]; // Webview is the web view :P

        NSURL *jsSite = [NSURL URLWithString:@"www.ThePlaceWithTheJS"];

        NSString *jsString = [NSString stringWithContentsOfURL:jsSite encoding:NSUTF8StringEncoding error:nil];


        [webView stringByEvaluatingJavaScriptFromString:jsString];

        NSString *userValue = userName.text;
        NSString *passValue = pass.text;
        NSString *javaFunction = [NSString stringWithFormat:@"login(%@,%@)", userValue, passValue]; // login is the function in the javascript


        [webView stringByEvaluatingJavaScriptFromString:javaFunction];  

    }

    }

那么,这里是JS文件:

<script type='text/javascript'>
function login(username,password){
    var usernameBox = document.getElementById("ctl00_plnMain_txtLogin");
    usernameBox.value = usernameBox.value + username;

    var passwordBox = document.getElementById("ctl00_plnMain_txtPassword");
    passwordBox.value = passwordBox.value + password;

}
</script>

所以,问题是我不知道我是否做得很好,或者如何让它正常工作。每当我测试它时,文本都不会加载到网站上的字段中。所以它显然在某个地方出错了......但是在哪里?

【问题讨论】:

  • 你的目标听起来很可疑......
  • 你为什么这么说:P
  • 只是一个提醒很酷的猫,你不必在这里乞求别人帮助你,每个人在这里浏览的全部目​​的都是为了解决你的问题,所以人们不可避免地会试图帮助你。我对 ObjC 一无所知,所以我无法真正帮助您,但我 900% 确信有人会为您解决这个问题。
  • 只是为了确定,您的 .js 文件实际上是否包含
  • 它实际上包含脚本标签:P。有什么问题吗?我根本不懂 JavaScript——编辑——我删除了它们,没有任何改变

标签: javascript iphone ios xcode uiwebview


【解决方案1】:
        [webView stringByEvaluatingJavaScriptFromString:jsString];

此调用尝试执行您的 javascript

但是,此时jsString包含&lt;script&gt;标签,不应该在.js文件中使用,标签在HTML中使用 所以在评估&lt;script&gt; 时出现错误

只需删除 .js 文件中的开始和结束标记就可以了。

另外,如果不是真的有必要,这也不是很好的方法,因为您通过同步加载脚本来延迟 webview 的加载时间

您还应该在异步模式下获取您的 .js 文件,并在收到评估此文件和您对登录功能的调用后

【讨论】:

  • 它仍然没有调用任何函数 D:
  • 好吧,可能还有其他一些错误:)
  • 尝试警报调试它。首先将整个 .js 脚本替换为 function(){alert('inside .js file')}();,这样您就会知道您已到达要加载文件的位置。
  • 我把JS文件改成上面的代码,没有任何反应;我猜这很糟糕? :P -- 我没有正确注入 JS 文件吗?
  • 所以你的JS没有被执行。实际上,它可能是一些安全层阻止您在任何网站上执行 .js 并仅允许在本地 webview 页面上执行。检查文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2012-03-21
相关资源
最近更新 更多