作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想用一些用户定义的宏来扩展我的电子表格应用程序。使用 javascript 似乎是个好主意......
它发现了一个“小问题”(我对 javascript 非常陌生)
import JavaScriptCore
let context = JSContext()!
context.exceptionHandler = { context, exception in
print("exception:", exception?.toString() ?? "")
}
context.evaluateScript(
"""
foo = function(a, b) {
return a + b
}
"""
)
context.evaluateScript("foo(1, 2)") // 3
context.objectForKeyedSubscript("foo")?.call(withArguments: [1,2]) // 3
context.evaluateScript(
"""
Foo = function() {}
Foo.foo = function(a, b) {
return a + b
}
"""
)
context.evaluateScript("Foo.foo(1, 2)") // 3
// exception. TypeError: undefined is not an object
context.objectForKeyedSubscript("Foo.foo")?.call(withArguments: [1, 2]) // Foo.foo is undefined ?????
如果 Foo.foo 是未定义的,它怎么能早一行运行?
最佳答案
您尝试了 .call(withArguments
。但我认为这适用于需要两个参数(对象和参数)的 Function.prototype.call()
。有关更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call
这行得通
context.objectForKeyedSubscript("Foo")?.invokeMethod("foo", withArguments: [1, 2])
关于javascript - 如何从swift调用javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55632446/
我是一名优秀的程序员,十分优秀!