以前(2021年08月31日)、投稿した↑こちらの記事ですが、今ではAI(GPT-4 Turbo)に以下のように質問するだけで、理想的なコードを教えてくれます。
質問:「WKWebViewでtarget=“_blank”に対応する方法は?」
AI: リンクを現在のwebViewでロードするコードを作成
質問:「これをsafariで開くようにして」
AI: リンクをSafariで開らくコードを作成
navigationTypeが.linkActivated(ユーザーがリンクをタップした)である場合、そしてtargetFrameがnilまたはメインフレームではない(つまりtarget="_blank"で開くリンクである)場合に、URLがSafariで開かれるようになります。
こちらも配慮もされており、我々が見落としがちな実装もしっかりコーディングされております。
また、コードの解説も丁寧にしてくれます。
AIが作成したコード
import WebKit
import UIKit
class ViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.navigationDelegate = self
view = webView
let url = URL(string: "あなたのURL")!
let request = URLRequest(url: url)
webView.load(request)
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if navigationAction.navigationType == .linkActivated, let url = navigationAction.request.url, navigationAction.targetFrame == nil || !navigationAction.targetFrame!.isMainFrame {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
decisionHandler(.cancel)
} else {
decisionHandler(.allow)
}
} else {
decisionHandler(.allow)
}
}
}