我正在使用 JavaScriptCore 来评估我的应用程序中的一些简单脚本。我正在创建一个全局对象并在其上定义一些属性,如下所示:
JSContext *context = [[JSContext alloc] init];
JSValue *globalObject = [context globalObject];
[globalObject setValue:fields forProperty"fields"];
...
所以脚本可以访问 fields
中的值等等。我希望脚本能够使用名为 lookup
的函数,并且我已经为该函数提供了 Objective-C 实现。
如何向全局对象添加一个属性,该对象是一个回调我的 Objective-C 方法的函数?我看到有一个名为 JSObjectMakeFunctionWithCallback
的函数,但它使用了像 JSObjectRef
s 这样的低级 C 构造,并采用 C 函数,而不是 Objective-C block ,所以我无法在实现中使用 self
。
您可以将 Objective-C block 传递给 JSContext,然后它将表现为函数。这样,您的脚本就可以回调您的 iOS 代码:
context[@"factorial"] = ^(int x) {
int factorial = 1;
for (; x > 1; x--) {
factorial *= x;
}
return factorial;
};
[context evaluateScript"var fiveFactorial = factorial(5);"];
JSValue *fiveFactorial = context[@"fiveFactorial"];
NSLog(@"5! = %@", fiveFactorial);
来源:Bignerdranch
关于javascript - 如何在 Obj-C 中定义带有回调的 Javascript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19495973/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |