-
TLS証明書の問題:
- サーバーが自己署名証明書を使用している場合や、証明書の有効期限が切れている場合にエラーが発生することがあります。
- 解決方法:
URLAuthenticationChallenge
を処理し、信頼できる証明書を指定する必要があります。以下はSwiftでの例です。
func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { let credential = URLCredential(trust: challenge.protectionSpace.serverTrust!) completionHandler(.useCredential, credential) } }
-
認証情報の問題:
- ウェブページがベーシック認証を要求している場合、認証情報が不足しているとエラーが発生することがあります。
- 解決方法:
URLCredential
を使用して認証情報を提供します。以下はSwiftでの例です。
let username = "your_username" let password = "your_password" let credential = URLCredential(user: username, password: password, persistence: .forSession) webView.load(URLRequest(url: yourURL, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 10)) webView.configuration.urlCredentialStorage?.set(credential, for: yourProtectionSpace)
-
リダイレクトの問題:
- サーバーがリダイレクトを返す場合、リダイレクト先のURLが信頼されない場合にエラーが発生することがあります。
- 解決方法:
WKNavigationDelegate
のdecidePolicyFor
メソッドを使用してリダイレクトを許可します。以下はSwiftでの例です。
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { if let url = navigationAction.request.url { if url.host == "redirected_domain.com" { decisionHandler(.allow) return } } decisionHandler(.cancel) }
これらの解決方法とコード例を使用することで、「didReceiveChallenge」エラーを処理し、WKWebViewを正常に使用することができます。