본문 바로가기
IOS

IOS 하이브리드 웹에서 window.open 처리 및 window.close 처리 (새창 처리)

by 일용직 코딩노동자 2020. 6. 8.
728x90
반응형

안드로이드에서는

https://onedaycodeing.tistory.com/62

 

안드로이드 하이브리드앱 새창 Popup(팝업)창 띄우기 및 닫기

하이브리드 앱을 진행하면서 Webview를 통해 페이지를 띄웁니다. 진행을 하다보면 스크립트(Javascript)딴에서 window.open으로 새창(팝업)을 띄웁니다. 이걸 안드로이드(네이티브)딴에서 뒤로가기나 다

onedaycodeing.tistory.com

해당 글을 참고 부탁드립니다.

 

우선 IOS로 웹뷰를 구성하고 웹딴에서 window.open으로 새창을 열면 네이티브에서 코드처리를 해주지않으면 새창이 열리지 않습니다.

 

안드로이드도 마찬가지였지만 ios도 다를건 없었습니다. (WebView가 코드로 작성됬다는 조건하에 진행하겠습니다)

 

우선 스토리보드에서 

 

Container View 하나를 화면에 채워주세요.

 

var WebViewPop: [WKWebView] = [WKWebView]()

기존 웹뷰선언은 그대로 두시고 따로 하나 더 선언해줄게요.

 

그리고 스토리보드에서 만든 View를 연결해주세여.

 

@IBOutlet weak var containerView: UIView!

그리고  웹뷰를 셋팅 할때 

 

self.containerView.addSubview(self.webView)
self.webviewPop.append(self.webView)

새창용 웹뷰도 같이 셋팅해줄게요.

 

self.webView는 기존 쓰는 메인화면을 보여주는 WebView입니다.

 

그리고 함수 하나를 셋팅해주겠습니다.

 

func ViewMaker(config: WKWebViewConfiguration) -> WKWebView {
        let view  = WKWebView(frame: .zero, configuration: config)
        view.uiDelegate = self as WKUIDelegate
        view.navigationDelegate = self
        view.scrollView.delegate = self
        return view
    }

 

이 후 extenstion으로 분리시킨 WKUIDelegate를 선언하겠습니다.

 

extension ViewController: WKUIDelegate {
}

해당 익스텐션 안에

 

public func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
        let webView = self.makeView(config: configuration)
        self.containerView.addSubview(webView)
        self.WebViewPop.append(webView)
        
        webView.snp.makeConstraints { (make) -> Void in
            make.top.equalToSuperview()
            make.bottom.equalToSuperview()
            make.left.equalToSuperview()
            make.right.equalToSuperview()
        }
        return webView
    }
    
    public func webViewDidClose(_ webView: WKWebView) {
        webView.removeFromSuperview()
        self.WebViewPop.removeLast()
    }

 

해당 함수를 호출해줍니다.

 

이녀석이 이제 스크립트딴에서 window.open했을때 호출됩니다.

 

메인 웹뷰는 두고 아까 만든 View와 WebViewPop에 새창을 보여주는겁니다.

 

메인 뷰 위에 덮어서 보여주는것이므로 메인뷰는 뒤에 살아있습니다.

 

해당 새창이 닫히면 뒤에 메인뷰가 보여집니다.

 

이제 닫는걸 해야하는데요.

 

밑에 코드를 보시면 

webViewDidClose 함수가 있습니다.

 

이녀석이 이제 스크립트에서 window.close했을때 호출됩니다.

 

이렇게 하이브리드 앱에서 스크립트 window.open과 window.close를 처리해봤습니다.

 

https://open-infra.tistory.com/

 

Open Source infra

KOSSA opensource로 구성한 인프라부분으로 수상이후 관심이 많아져서 혼자 오픈소스 관련 솔루션을 테스트 하고 있습니다. 현재 평범한 중소기업 전산팀에서 일하고 있습니다.

open-infra.tistory.com

추가로

 

제가 아는분의 블로그입니다.

 

각종 네트워크 서버 보안쪽에서는 매우 능통하신 분이니 따로 물어보셔도 좋을것같습니다.

 

ㄱ ㅏ   ㄱ  푸시

ㅗ o    ㅗ  푸시 :D

728x90
반응형

댓글