본문 바로가기
iOS

[iOS] WkWebView에서 window.open / window.close 처리

by giop15 2022. 6. 30.
반응형

WKWebView에서 window.open 또는 window.close 대해 처리할 경우가 생기는데 어떻게 처리를 해야 하는지 알아봅시다.

 

  • 웹뷰에서 window.open을 호출할 때 WKUIDelegate에 있는 webView(_:createWebViewWith:for:windowFeatures:) 함수가 호출됩니다. 이 함수 안에서 새로운 창을 보여주는 화면(createWebView)을 만들어서 세팅을 해주면 새로운 창 화면이 보입니다.
  • 웹뷰에서 window.close를 호출하면 webViewDidClose(_:) 함수가 호출되는데 이 함수에서 새로운 창을 없애는 처리를 하면 됩니다.
class ViewController: UIViewController {
    var createWebView: WKWebView?
    
    // ...
}

extension ViewController: WKUIDelegate {
    func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
        let frame = UIScreen.main.bounds
        
        createWebView = WKWebView(frame: frame, configuration: configuration)
        
        guard let createWebView = createWebView else { return nil }
        createWebView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        createWebView.navigationDelegate = self
        createWebView.uiDelegate = self
        view.addSubview(createWebView)
        
        return createWebView
    }
    
    func webViewDidClose(_ webView: WKWebView) {
        if webView == createWebView {
            createWebView?.removeFromSuperview()
            createWebView = nil
        }
    }
}
반응형

'iOS' 카테고리의 다른 글

[iOS] 그림 그리기  (0) 2022.04.12
[iOS] 음성 녹음  (0) 2022.03.14
[iOS] 전화걸기  (0) 2022.02.28
[iOS] [Swift] 카메라 및 앨범 사진 가져오기  (0) 2022.02.28