본문 바로가기
개발노트/iOS

[Swift] javascript Alert & Confirm 띄우기

by 전지적진영시점 2023. 2. 20.
반응형

저번 포스팅에서 android에서 자바스크립트 alert 함수와 confirm 함수에 반응하는 방법을 포스팅했었습니다

 

오늘은 이어서 iOS에서도 똑같이 위 함수에 반응하도록 해보겠습니다 !

 

class MainWebView : UIViewController, WKNavigationDelegate, WKScriptMessageHandler, WKUIDelegate{
    
    @IBOutlet var webView: WKWebView!

먼저 WebView class에 WKScriptMessageHandler 프로토콜을 채택합시다

 

WKScriptMessageHandler 는 웹페이지에서 실행되는 javascript code에서 메세지를 수신하기 위한 인터페이스입니다

 

    func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
        
        let alertController = UIAlertController(title: self.localizing(key: "알림", language: self.languageBundle), message: message, preferredStyle: .alert)
        let cancelAction = UIAlertAction(title: localizing(key: "확인", language: languageBundle), style: .cancel) { _ in
            completionHandler()
        }
        alertController.addAction(cancelAction)
        DispatchQueue.main.async {
            self.present(alertController, animated: true, completion: nil)
        }
    }

 

🐥 Alert 메세지를 수신받기 위한 함수입니다.

 

    func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {
        let alertController = UIAlertController(title: self.localizing(key: "알림", language: self.languageBundle), message: message, preferredStyle: .alert)
        let cancelAction = UIAlertAction(title: localizing(key: "취소", language: languageBundle), style: .cancel) { _ in
            completionHandler(false)
        }
        let okAction = UIAlertAction(title: localizing(key: "확인", language: languageBundle), style: .default) { _ in
            completionHandler(true)
        }
        alertController.addAction(cancelAction)
        alertController.addAction(okAction)
        DispatchQueue.main.async {
            self.present(alertController, animated: true, completion: nil)
        }
    }

 

🐥 Confirm 메세지를 수신받기 위한 함수입니다.

 

 

마무리하여

WKwebView 는 native 코드와 javascript 코드 간의 양방향 통신을 지원합니다.

이후에 양방향 통신이 어떻게 이루어지는지에 대해 포스팅을 하겠습니다!

 
반응형

댓글