【问题标题】:Passing Javascript Variable to Objective-C将 Javascript 变量传递给 Objective-C
【发布时间】:2011-05-10 14:43:55
【问题描述】:
我在这里看到了如何将 Objective-C 变量传递给 JavaScript,passing objective c variable to javascript in ios,但是当我使用类似这样的东西时,如何将变量从 JavaScript 传递给 Objective-C:
[webView stringByEvaluatingJavaScriptFromString:@"var elems = document.body.getElementsByTagName(\"u\");"
"passThisVarToObjC = elems.length;"
【问题讨论】:
标签:
javascript
objective-c
variables
【解决方案1】:
嗯,这就是我们所说的字符串类型。
因为stringByEvaluatingJavaScriptFromString: 的返回类型是NSString *,您要么需要坚持使用字符串,要么将值强制转换为其他(read:more usable)类型。
但无论如何,stringByEvaluatingJavaScriptFromString: 将毫无问题地返回 JavaScript 变量的值。
实现这一点的方法是使用匿名函数(在这种情况下是自执行的):
NSString *numOfElements = [webView stringByEvaluatingJavaScriptFromString:@"(function() {var elems = document.body.getElementsByTagName(\"u\"); return elems.length;})();"];
//do normal stuff with numOfElements like cast to an int or something cool like that.
【解决方案2】:
您的 javascript 中需要有一个 return 语句。可能有更好的方法可以做到这一点,但以下 javascript 对我有用:
NSString* findLink = @"function f() {var x = document.getElementsByTagName('a');
if(x.length > 0) { return x[0].getAttribute('href');}; return null;} f(); ";
尝试使用此代码:
[webView stringByEvaluatingJavaScriptFromString:@"function f() {var elems =
document.body.getElementsByTagName(\"u\"); return elems.length;}f();"];