使用JSContext从Swift中的JavaScript捕获打印语句
我正在尝试使用使用JSContext从Swift中的JavaScript捕获打印语句,javascript,swift,javascriptcore,Javascript,Swift,Javascriptcore,我正在尝试使用JSContext评估iOS应用程序中的一些JavaScript。它工作正常,但是我无法捕获console.log()语句。我怎样才能得到这些函数调用的结果,以便也能用Swift打印它们 示例代码 let jsSource = "var testFunct = function(message) { console.log(\"kud\"); return \"Test Message: \" + message;}" let context = JSContex
JSContext
评估iOS应用程序中的一些JavaScript。它工作正常,但是我无法捕获console.log()
语句。我怎样才能得到这些函数调用的结果,以便也能用Swift打印它们
示例代码
let jsSource = "var testFunct = function(message) { console.log(\"kud\"); return \"Test Message: \" + message;}"
let context = JSContext()
context?.evaluateScript(jsSource)
let testFunction = context?.objectForKeyedSubscript("testFunct")
let result = testFunction?.call(withArguments: ["the message"])
print(result!)
示例日志
测试消息:消息
如果有人在为同样的事情挣扎,下面是Swift 4中的答案
let javascriptContext = JSContext()
javascriptContext?.evaluateScript("var console = { log: function(message) { _consoleLog(message) } }")
let consoleLog: @convention(block) (String) -> Void = { message in
print("console.log: " + message)
}
javascriptContext?.setObject(unsafeBitCast(consoleLog, to: AnyObject.self), forKeyedSubscript: "_consoleLog" as (NSCopying & NSObjectProtocol)!)
现在,您可以在任何后续的evaluateScript
调用javascriptContext
中调用console.log()