笔记: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
}
}