반응형
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] CocoaPods 의존성 설치 문제 해결하기 (0) | 2025.01.19 |
---|---|
[iOS] 그림 그리기 (0) | 2022.04.12 |
[iOS] 음성 녹음 (0) | 2022.03.14 |
[iOS] 전화걸기 (0) | 2022.02.28 |
[iOS] [Swift] 카메라 및 앨범 사진 가져오기 (0) | 2022.02.28 |