如何从Objective-C代码调用javascript代码?

时间:2016-05-16 06:00:04

标签: javascript ios objective-c

我想从我的Objective - C代码中调用以下javascript代码。我找到了许多答案,例如How to call JavaScript Function in objective C,但没有一个符合我的要求。以下是我的代码

var s=document.getElementsByTagName('script')[0];
var sc=document.createElement('script');
sc.type='text/javascript';
sc.async=true;
sc.src='https://api.zaakpay.com/zaakpay.js?random=' + Math.random();
s.parentNode.insertBefore(sc,s);


function encryptField(cardvalue) {
        var out = "";
        for ( var i = 0; i < cardvalue.length; i++) {
                out += (cardvalue.charAt(i).charCodeAt() + key.charAt(i % key.length)
                                .charCodeAt())
                                + ",";
        }
        return out;
}


function prepareCall(){

   var paymenttype = document.getElementById("paymenttype").value;
   if(paymenttype=='CC' || paymenttype=='DC' || paymenttype=='SC'){
      document.getElementById("cvv").value = encryptField(document.getElementById("cvv").value);
   }
   if(paymenttype=='CC' || paymenttype=='DC' ){
          document.getElementById("ccnumber").value = encryptField(document.getElementById("ccnumber").value);
          document.getElementById("expmonth").value = encryptField(document.getElementById("expmonth").value);
          document.getElementById("expyear").value = encryptField(document.getElementById("expyear").value);
   }
}

我可以直接从我的ios代码调用上面的代码而无需加载HTML页面吗?如果我需要一个HTML页面来加载脚本,那么我可以在加载Web视图后立即调用这些方法?另外我需要在prepareCall()方法中传递一些参数?我怎么能做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以使用

加载js
[_webView loadHTMLString:@"<script src=\"your.js\"></script>" baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] resourcePath]]];

然后在webViewDidFinishLoad中,您可以调用函数并传递参数,如下所示

NSString *javascriptString = [NSString stringWithFormat:@"yourFunction('%@','%@')",firstVar,secondVar];
[_webView stringByEvaluatingJavaScriptFromString:javascriptString];

希望它有助于:)

答案 1 :(得分:0)

您链接的问题实际上就是您所需要的。您可以从字符串加载UIWebView(请参阅iOS Load UIWebView From String),这样您就可以使用上面的代码创建一个字符串,只要将其放在<script>标记中,它就会在UIWebView时执行装了。

即。 (HTML可能太小而无法运行,这实际上只是伪代码

NSString *foo = @"<html><head><script>"
                // Insert your script here
                "</script></head><body></body></html>";

但是,最好将全局范围的代码放在函数中并将其作为正文的onload处理程序调用。

然而,您可能需要做很多其他事情......除非您想要做的只是将结果显示为网页。

P.S。

[webView loadHTMLString:foo baseURL:nil];