iOS
[iOS] WkWebView에서 window.open / window.close 처리
giop15
2022. 6. 30. 20:09
반응형
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
}
}
}
반응형