movii
6/28/2017 - 2:09 AM

笔记:iOS 与 JavaScript 的交互(二):JavaScriptCore:16. JSContext 相关 demo,在 Delegate:webViewDidFinishLoad() 中获取 context

笔记:iOS 与 JavaScript 的交互(二):JavaScriptCore:16. JSContext 相关 demo,在 Delegate:webViewDidFinishLoad() 中获取 context

extension UIWebViewWithJavaScriptCore: UIWebViewDelegate {
  func webViewDidFinishLoad(_ webView: UIWebView) {
    
    self.navigationItem.title = webView.stringByEvaluatingJavaScript(
      from: "document.title"
    )
    
    context = webView.value(
      forKeyPath: "documentView.webView.mainFrame.javaScriptContext"
    ) as? JSContext
    
    // ...
    
    let callBack : @convention(block) (String?) -> Void = { paramFromJS in
      let msg = "\(paramFromJS ?? "default value" as String)"
      self.alert(message: msg)
    }
    
    context?.setObject( 
      unsafeBitCast(callBack, to: AnyObject.self), 
      forKeyedSubscript: "invokeNative" as NSCopying & NSObjectProtocol
    )
  }
}