Перехват выписки из JavaScript в Swift с использованием JSContext - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь оценить JavaScript в моем приложении для iOS, используя JSContext. Это работает хорошо, однако я не могу поймать 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!)

Примеры журналов

Тестовое сообщение: сообщение

1 Ответ

0 голосов
/ 11 мая 2018

Если кто-то борется с тем же, вот ответ в 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)!)

Теперь вы можете звонить console.log() при любых последующих evaluateScript звонках javascriptContext.

...