使用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()