반응형
WKWebView에서 window.open(), window.close()이 호출된 경우 아래 메서드로 처리가 가능하다.
자바스크립트의 위 이벤트들을 받기 위해서는 WKNavigationDelegate, WKUIDelegate 프로토콜을 선언해야 한다.
@interface ViewController () <WKNavigationDelegate, WKUIDelegate> {
}
[wkWebView setUIDelegate:self];
[wkWebView setNavigationDelegate:self];
- 팝업이 열리는 경우 (window.open 또는 target="_blank")
이 경우 일반적으로 canOpenURL if문 안에서 새로운 팝업 웹뷰를 생성하여 그 웹뷰를 리턴하여 화면을 팝업 화면을 출력한다.
별도 팝업이나 처리가 필요하지 않은 경우는 nil을 리턴하면 된다.
-(WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
if (!navigationAction.targetFrame.isMainFrame) {
if ([[UIApplication sharedApplication] canOpenURL:navigationAction.request.URL]) {
// 팝업(새 창) 뜨는 경우 호출됨 (window.open 또는 target="_blank")
}
}
return nil;
}
- 팝업이 닫히는 경우 (window.close)
팝업이 닫히는 경우 아래 API가 호출된다.
-(void)webViewDidClose:(WKWebView *)webView {
// 팝업 닫히는 경우 호출됨
}
- 전체 소스코드
@interface ViewController () <WKNavigationDelegate, WKUIDelegate> {
}
- (void)viewDidLoad {
[wkWebView setUIDelegate:self];
[wkWebView setNavigationDelegate:self];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
[self.wkWebView loadRequest:request];
}
-(WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
if (!navigationAction.targetFrame.isMainFrame) {
if ([[UIApplication sharedApplication] canOpenURL:navigationAction.request.URL]) {
// 팝업(새 창) 뜨는 경우 호출됨 (window.open 또는 target="_blank")
}
}
return nil;
}
-(void)webViewDidClose:(WKWebView *)webView {
// 팝업 닫히는 경우 호출됨
}
반응형
'iOS > Swift + Objective-c' 카테고리의 다른 글
[iOS] TableView 빈 행 라인 숨기기 (hide empty table view rows) (0) | 2021.01.16 |
---|---|
[Swift] 앱스토어 링크 열기 (App Store Link) (0) | 2021.01.16 |
[iOS] WKWebView 기본 사용법 (프로젝트 내 html파일 출력) (0) | 2020.11.19 |
[Swift] log에 date, file name, function name, line 쉽게 출력하는 방법 (0) | 2020.10.12 |
[iOS] Xcode 주석으로 자동 개발 문서 만드는 방법 (jazzy) (0) | 2020.07.24 |