티스토리 뷰

이제는 UIWebView의 시대는 가고 있는것 같습니다.

그래서 WKWebView를 사용을 하는데요. 이게 기존에는 커스텀을 하기 위해서는 extension하여서 만들어야 했는데, 이제는 아예 구현이 되어 있지 않은 protocol 상태라 구현을 하여 주어야 합니다.


WKUIDelegate의 두개의 function을 구현하여 주면 됩니다.


오히려... 사용자 입장에서 얼랏을 커스텀하여서 사용할수 있어서 좋은것 같기도 합니다.

물론 UIWebView에서도 되었지만요.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
extension ViewController: WKUIDelegate {
    
    func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
        let alertController = UIAlertController(title: "test", message: message, preferredStyle: .alert)
        let cancelAction = UIAlertAction(title: "확인", style: .cancel) { _ in
            completionHandler()
        }
        alertController.addAction(cancelAction)
        DispatchQueue.main.async {
            self.present(alertController, animated: true, completion: nil)
        }
    }
    
    func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool-> Void) {
        let alertController = UIAlertController(title: "test", message: message, preferredStyle: .alert)
        let cancelAction = UIAlertAction(title: "취소", style: .cancel) { _ in
            completionHandler(false)
        }
        let okAction = UIAlertAction(title: "확인", style: .default) { _ in
            completionHandler(true)
        }
        alertController.addAction(cancelAction)
        alertController.addAction(okAction)
        DispatchQueue.main.async {
            self.present(alertController, animated: true, completion: nil)
        }
    }
}
cs


이렇게만 붙여 넣어주면 됩니다.

위가 alert, 아래가 confirm입니다.


아... 이것을 하여주고 delegate를 등록하여 주어야 겠지요?


1
webView.uiDelegate = self
cs


이렇게만 해주면 됩니다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함