onmyway133 / blog

🍁 What you don't know is what you haven't learned
https://onmyway133.com/
MIT License
669 stars 33 forks source link

How to handle log in JSContext with JavascriptCore #957

Open onmyway133 opened 6 months ago

onmyway133 commented 6 months ago

Define console object and set log function to point to our Swift function

import JavaScriptCore

extension JSContext {
    func injectConsoleLog() {

        evaluateScript(
        """
            var console = {};
        """
        )

        let consoleLog: @convention(block) (Any) -> Void = {
            print($0)
        }

        objectForKeyedSubscript("console")
            .setObject(consoleLog, forKeyedSubscript: "log" as NSString)
    }
}

Then we can just call

let context = JSContext()!
context.injectConsoleLog()
context.evaluateScript(jsContent)