WKWebView 拦截拨号事件 - Swift 代码示例
在 WKWebView 中拦截拨号事件,你需要使用 WKNavigationDelegate 协议中的方法来拦截 URL 请求。下面是一个示例的实现:
- 首先,确保你的视图控制器实现了 WKNavigationDelegate 协议:
class ViewController: UIViewController, WKNavigationDelegate {
// ...
}
- 在视图加载完成后,设置 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)
}
- 实现 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 著作权归作者所有。请勿转载和采集!