我正在寻找"内联"从Javascript字符串运行本机Swift代码的方法。目前,我的工作如下:
我从Web视图中提取了JSContext,因此我可以直接访问我的javascript环境:
var jsContext = myWebView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") as JSContext
一旦我有了上下文,我就在其中设置一个新对象来调用我的代码块:
var codeClosure: @objc_block ()->() = { ()->() in println("this is my swift code closure") }
var casted: AnyObject = unsafeBitCast(codeClosure, AnyObject.self) as AnyObject
jsContext.setObject(casted, forKeyedSubscript: "callMySwiftClosure")
这让我可以调用我的代码,因为它是一个常规的javascript函数:
myWebView.stringByEvaluatingJavaScriptFromString("callMySwiftClosure()")
这非常简单,效果很好
现在,我想弄清楚我怎样才能注射" swift闭包直接转换为javascript字符串,而不在JSContext中显式创建新对象。意思是,我希望能够做到这样的事情:
myWebView.stringByEvaluatingJavaScriptFromString("\(codeClosure)")
关于如何做到这一点的任何想法?