WKNavigationType 이해하기
iOS에서 WKWebView를 사용하여 웹 콘텐츠를 표시할 때, 사용자의 다양한 탐색 동작을 감지하고 이에 맞춰 적절한 처리를 하는 것은 매우 중요합니다. 이를 위해 Apple은 WKNavigationType이라는 열거형을 제공하여 WKWebView 내에서 발생하는 탐색의 유형을 식별할 수 있게 해줍니다. 이 글에서는 WKNavigationType의 각 항목과 그에 해당하는 웹에서의 동작을 자세히 살펴보겠습니다.
WKNavigationType이란?
WKNavigationType은 WKWebView에서 발생하는 탐색 요청의 유형을 나타내는 열거형입니다. 이 열거형은 WKNavigationDelegate의 webView:decidePolicyForNavigationAction:decisionHandler: 메서드에서 탐색 요청이 어떤 유형의 동작에 의해 발생했는지를 식별하는 데 사용됩니다.
WKNavigationType 항목과 웹에서의 동작
1. WKNavigationTypeLinkActivated
• 설명: 사용자가 <a href="..."> 링크를 클릭했을 때 발생합니다.
• 예시 동작: 페이지의 링크를 클릭하여 새로운 페이지로 이동할 때.
• 실제 코드 예시:
if navigationAction.navigationType == .linkActivated {
print("Link clicked: \(navigationAction.request.url?.absoluteString ?? "")")
decisionHandler(.allow)
}
2. WKNavigationTypeFormSubmitted
• 설명: 사용자가 <form> 태그를 통해 폼을 제출했을 때 발생합니다.
• 예시 동작: 로그인 폼이나 검색 폼을 제출할 때.
• 실제 코드 예시:
if navigationAction.navigationType == .formSubmitted {
print("Form submitted: \(navigationAction.request.url?.absoluteString ?? "")")
decisionHandler(.allow)
}
3. WKNavigationTypeBackForward
• 설명: 사용자가 웹뷰의 히스토리 내에서 뒤로 가기나 앞으로 가기 동작을 했을 때 발생합니다.
• 예시 동작: 뒤로 가기 버튼을 누르거나 앞으로 가기 버튼을 클릭할 때.
• 실제 코드 예시:
if navigationAction.navigationType == .backForward {
print("Navigated back/forward to: \(navigationAction.request.url?.absoluteString ?? "")")
decisionHandler(.allow)
}
4. WKNavigationTypeReload
• 설명: 사용자가 현재 페이지를 새로고침했을 때 발생합니다.
• 예시 동작: 새로고침 버튼을 클릭하거나 브라우저에서 Cmd+R 또는 Ctrl+R을 사용하여 페이지를 새로고침할 때.
• 실제 코드 예시:
if navigationAction.navigationType == .reload {
print("Page reloaded: \(navigationAction.request.url?.absoluteString ?? "")")
decisionHandler(.allow)
}
5. WKNavigationTypeFormResubmitted
• 설명: 사용자가 이전에 제출했던 폼을 다시 제출했을 때 발생합니다.
• 예시 동작: 뒤로 가기를 한 후 이전에 제출했던 폼을 다시 제출할 때.
• 실제 코드 예시:
if navigationAction.navigationType == .formResubmitted {
print("Form resubmitted: \(navigationAction.request.url?.absoluteString ?? "")")
decisionHandler(.allow)
}
6. WKNavigationTypeOther
• 설명: 위에서 설명한 유형들 외의 모든 탐색에 대해 발생합니다. 특정한 이유로 탐색이 발생했으나 앞의 유형과 일치하지 않는 경우입니다.
• 예시 동작: JavaScript에 의해 URL이 변경되거나 자동 리다이렉션이 발생하는 경우.
• 실제 코드 예시:
if navigationAction.navigationType == .other {
print("Other navigation type: \(navigationAction.request.url?.absoluteString ?? "")")
decisionHandler(.allow)
}
결론
WKNavigationType을 이해하고 이를 활용하면, WKWebView 내에서 발생하는 다양한 탐색 동작을 세밀하게 제어할 수 있습니다. 링크 클릭, 폼 제출, 새로고침 등 사용자가 웹뷰에서 어떤 동작을 하는지에 따라 탐색 정책을 설정하여 보다 유연하고 안전한 웹 탐색 환경을 제공할 수 있습니다.
WKNavigationType을 적절히 사용하면 탐색의 흐름을 잘 관리할 수 있고, 특정 동작에 대해 원하는 대로 대응할 수 있어 사용자 경험을 향상시킬 수 있습니다.