iOS/UIKit

WKNavigationType 이해하기

당근쥬스 2024. 9. 9. 11:19
반응형

iOS에서 WKWebView를 사용하여 웹 콘텐츠를 표시할 때, 사용자의 다양한 탐색 동작을 감지하고 이에 맞춰 적절한 처리를 하는 것은 매우 중요합니다. 이를 위해 Apple은 WKNavigationType이라는 열거형을 제공하여 WKWebView 내에서 발생하는 탐색의 유형을 식별할 수 있게 해줍니다. 이 글에서는 WKNavigationType의 각 항목과 그에 해당하는 웹에서의 동작을 자세히 살펴보겠습니다.

 

WKNavigationType이란?

 

WKNavigationTypeWKWebView에서 발생하는 탐색 요청의 유형을 나타내는 열거형입니다. 이 열거형은 WKNavigationDelegatewebView: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을 적절히 사용하면 탐색의 흐름을 잘 관리할 수 있고, 특정 동작에 대해 원하는 대로 대응할 수 있어 사용자 경험을 향상시킬 수 있습니다.

반응형