在 WKWebView 中拦截拨号事件,你需要使用 WKNavigationDelegate 协议中的方法来拦截 URL 请求。下面是一个示例的实现:

  1. 首先,确保你的视图控制器实现了 WKNavigationDelegate 协议:
class ViewController: UIViewController, WKNavigationDelegate {
    // ...
}
  1. 在视图加载完成后,设置 WKWebView 的 navigationDelegate 为当前视图控制器:
override func viewDidLoad() {
    super.viewDidLoad()
    
    let webView = WKWebView(frame: view.bounds)
    webView.navigationDelegate = self
    view.addSubview(webView)
    
    // 加载网页
    let url = URL(string: 'https://www.example.com')
    let request = URLRequest(url: url!)
    webView.load(request)
}
  1. 实现 WKNavigationDelegate 协议中的 shouldAllowRequest 方法,并检查 URL 的 scheme 是否为 'tel',如果是则使用 UIApplication 进行拨号:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if let url = navigationAction.request.url, url.scheme == 'tel' {
        if UIApplication.shared.canOpenURL(url) {
            UIApplication.shared.open(url)
        }
        decisionHandler(.cancel)
    } else {
        decisionHandler(.allow)
    }
}

这样,当用户点击包含 'tel://' 的链接时,将会触发拨号操作,并取消继续加载该 URL。如果 URL 的 scheme 不是 'tel',则允许继续加载该 URL。

注意:在 Info.plist 文件中,你需要添加一个键名为 'LSApplicationQueriesSchemes' 的数组,并在其中添加一个字符串值 'tel',用于允许你的应用程序启动电话应用。


原文地址: https://www.cveoy.top/t/topic/piUK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录