movii
6/27/2017 - 2:12 AM

笔记:iOS 与 JavaScript 的交互(一):UIWebView - 3.2 native 对协议链接拦截

笔记:iOS 与 JavaScript 的交互(一):UIWebView - 3.2 native 对协议链接拦截

extension ViewController: UIWebViewDelegate {
  func webView(_ webView: UIWebView,
             shouldStartLoadWith request: URLRequest,
             navigationType: UIWebViewNavigationType) -> Bool {
    
    // 1 拦截名为 hello 协议;
    if request.url?.scheme == "hello" {
     
     // 2 获取协议后的 path,也就是lien;
     let path = request.url?.absoluteString as String!

      // 3 将 path 的 string 作为 window.alert() 方法的参数,
      // 通过 webview.stringByEvaluatingJavaScript() 方法执行该 JavaScript 函数;
      let msg = String(format: "alert('intercept scheme: %@')", path!)
      webview.stringByEvaluatingJavaScript(from: msg)

      // 4 因为拦截到了对应的hello 协议,在 delegate method 最终返回 false,
      // 阻止 UIWebView 继续执行该请求(跳转了也是个 404)。
      return false
    }

    return true
 }
}