あなたWKNavigationDelegate
でwebView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
を実装します。そこでは、選択したリンクのホストが最初のリクエストのように同じかどうかを確認できます。そうでない場合は、UIApplication.shared.open(url)
でリンクを開き、.cancel
で決定ハンドラを実行します。リンクはWebビューにロードされません。許可そうでなければただ...
クイックと汚いのバージョンは(スウィフト4)のようになります。
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if navigationAction.navigationType == .linkActivated {
if let url = navigationAction.request.url,
originalHost != url.host, UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
decisionHandler(.cancel)
} else {
decisionHandler(.allow)
}
} else {
decisionHandler(.allow)
}
}