투케이2K

355. (ios/swift5) Xcode 내에서 Web JavaScript 웹 자바스크립트 console.log 확인 실시 본문

IOS

355. (ios/swift5) Xcode 내에서 Web JavaScript 웹 자바스크립트 console.log 확인 실시

투케이2K 2023. 10. 26. 15:44
반응형

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

    // -----------------------------------------------------------------------------------------
    // MARK: - [Xcode : Swift 내에서 웹 자바스크립트 console.log 확인 방법]
    // -----------------------------------------------------------------------------------------
    // 필요 설정 : import WebKit
    // -----------------------------------------------------------------------------------------
    // 필요 설정 : WKScriptMessageHandler
    // -----------------------------------------------------------------------------------------



    // -----------------------------------------------------------------------------------------
    // MARK: - [전역 변수 선언]
    // -----------------------------------------------------------------------------------------
    private var main_webview: WKWebView? = nil // [동적으로 웹뷰 생성]
    var javascriptController = WKUserContentController() // [자바스크립트 통신 사용]
    let javascriptConfig = WKWebViewConfiguration() // [자바스크립트 통신 사용]
    // -----------------------------------------------------------------------------------------



    // -----------------------------------------------------------------------------------------
    // MARK: - [소스 코드] : [Console Log 브릿지 추가]
    // -----------------------------------------------------------------------------------------
    func addJavaScriptBridge(){
        S_Log._D_(description: "자바스크립트 통신 브릿지 추가", data: [
            "Bridge :: logHandler"
        ])
        
        
        // -----------------------------------------
        // [브릿지 경로 추가 : 웹 브라우저 console.log 확인]
        // -----------------------------------------
        let source = "function captureLog(msg) { window.webkit.messageHandlers.logHandler.postMessage(String(msg)); } window.console.log = captureLog;"
        let script = WKUserScript(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: false)
        self.javascriptController.add(self, name: "logHandler") // [console 로그 확인] : [브릿지 추가]
        // -----------------------------------------


        // -----------------------------------------
        // [javascriptController 지정]
        // -----------------------------------------
        self.javascriptConfig.userContentController = self.javascriptController
        self.javascriptConfig.userContentController.addUserScript(script) // [웹 console log 확인 스크립트 추가]
        // -----------------------------------------
    }
    // -----------------------------------------------------------------------------------------



    // -----------------------------------------------------------------------------------------
    // MARK: - [소스 코드] : [브릿지 응답 데이터 확인] : [Console Log 출력]
    // -----------------------------------------------------------------------------------------
    @available(iOS 8.0, *)
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {

        
        // ---------------------------------------------------------
        // MARK: [브릿지 분기 처리] : [웹 코드] window.webkit.messageHandlers.logHandler.postMessage("");
        // ---------------------------------------------------------
        // [웹 브라우저 콘솔 로그 확인 용도]
        // ---------------------------------------------------------
        if message.name == "logHandler" {
            print("Web Js Console Log :: \(message.body)")
        }

    }
    // -----------------------------------------------------------------------------------------
 

[결과 출력]

 

Web Js Console Log :: 
Web Js Console Log :: =========================================
Web Js Console Log :: [window onload] : [start]
Web Js Console Log :: =========================================
Web Js Console Log ::

 

반응형
Comments