swift 笔记:iOS与JavaScript的交互(二):JavaScriptCore:17。 JSExport相关演示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift 笔记:iOS与JavaScript的交互(二):JavaScriptCore:17。 JSExport相关演示相关的知识,希望对你有一定的参考价值。

// JSExport 协议定义
@objc protocol JSMethodsProtocol: JSExport {
  func alert(message: String)
}

// 当前 ViewController 继承 JSExport 协议:JSMethodsProtocol
class UIWebVIewWithJSExport: UIViewController, JSMethodsProtocol {
    //...
    func alert(message: String) {
    DispatchQueue.main.async(execute: {
      let ac = UIAlertController(title: "invokedByJavaScript", message: message, preferredStyle: .alert)
      let action = UIAlertAction(title: "ok", style: .default)
      ac.addAction(action)
      self.present(ac, animated: true)
    })
  }
}

// 在 webViewDidFinishLoad 的 Delegate 中暴露
extension UIWebVIewWithJSExport: UIWebViewDelegate {
  func webViewDidFinishLoad(_ webView: UIWebView) {
    self.navigationItem.title = webView.stringByEvaluatingJavaScript(from: "document.title")
    
    context = webView.value( 
      forKeyPath: "documentView.webView.mainFrame.javaScriptContext"
     ) as? JSContext
    
    //...
    // 将当前 ViewController 以 JSBridge 暴露出去
    context?.setObject(
      self, forKeyedSubscript: "jsBridge" as NSCopying & NSObjectProtocol
    )
  }
}

以上是关于swift 笔记:iOS与JavaScript的交互(二):JavaScriptCore:17。 JSExport相关演示的主要内容,如果未能解决你的问题,请参考以下文章

swift 笔记:iOS与JavaScript的交互(二):JavaScriptCore:11。暴露

swift 笔记:iOS与JavaScript的交互(二):JavaScriptCore:8。调用引入的JavaScript - 调用

swift 笔记:iOS与JavaScript的交互(二):JavaScriptCore:7。调用引入的JavaScript - 引入方法

swift 笔记:iOS与JavaScript的交互(三):WKWebView 2.显示加载进度

swift 笔记:iOS与JavaScript的交互(二):JavaScriptCore:14。 camelCase调用

swift 笔记:iOS与JavaScript的交互(一):UIWebView - 2.1 UIWebViewDelegate