【发布时间】:2017-04-15 11:54:48
【问题描述】:
我正在使用 JavaScriptCore 与 Objective-C 代码进行交互
JSValue 中没有 isFunction 方法,但是我想检查一个 JSValue 是否是一个 JS Function 并从 Objective-C 中调用它
【问题讨论】:
标签: objective-c javascriptcore
我正在使用 JavaScriptCore 与 Objective-C 代码进行交互
JSValue 中没有 isFunction 方法,但是我想检查一个 JSValue 是否是一个 JS Function 并从 Objective-C 中调用它
【问题讨论】:
标签: objective-c javascriptcore
我最终注入了一个小的 javascript 代码来返回 typeof 的结果
[context evaluateScript:@"function is(obj){ return typeof obj }"];
JSValue *is = [[context globalObject] valueForProperty:@"is"];
JSValue *type = [is callWithArguments:@[ is ]];
【讨论】:
看起来没有办法检查。你只能检查你的函数是一个对象(在 JS 中函数是对象)。
根据文档,如果值不能被视为 JavaScript 函数,-[JSValue callWithArguments:] 将返回 nil。如果 JS 函数没有显式返回值,那么它会隐式返回 JavaScript 值 undefined。所以,看起来你可以简单地尝试调用 JS 函数并在它返回 nil 时处理它。
【讨论】:
不创建任何全局对象的单线:
// evaluates to true if value is a function, false otherwise
[[value.context evaluateScript:@"(obj) => typeof obj === 'function'"] callWithArguments:@[value]].toBool
【讨论】: