공부방/iOS

wkwebview native function call from javascript(WKWebView Javascript에서 iOS 함수 호출)

soycrab 2019. 6. 28. 15:06

swift Code

 자신의 ViewController에 기본 Webview Setting은 자신에게 맞게 하고 녹색 부분을 추가해 주면 된다

 

override func viewDidLoad() {

        super.viewDidLoad()

        initView()

       wkWebView.load(YOUR UrlRequest)

    }

 

func initView() {

        wkWebView = WKWebView(frame: contentView.frame, configuration: getWebViewConfiguration())

        wkWebView.uiDelegate = self

        wkWebView.navigationDelegate = self

    }

 

func getWebViewConfiguration() -> WKWebViewConfiguration {

        let contentController = WKUserContentController()

        let wkWebViewConfiguration = WKWebViewConfiguration()

        wkWebViewConfiguration.preferences = WKPreferences()

        wkWebViewConfiguration.preferences.javaScriptEnabled = true

        wkWebViewConfiguration.userContentController = contentController

        contentController.add(self, name: "CustomMethod")

        return wkWebViewConfiguration

    }

 

extension YourViewController: WKScriptMessageHandler {

    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {

        if(message.name == "CustomMethod") {

            //TODO Update Token API Call

        }

    }

}

 

Javascript Code

Javascript 에서는 아래와 같이  iOS Native 호출을 해주면 되는데

빨간색 처리 된 부분처럼 {} 를 추가해 주지 않고, 빈 인자로 호출하면 

TypeError: Not enough arguments 가 발생한다. 

인자가 없더라도 아래처럼 추가해 주고 호출하면 된다.

window.webkit.messageHandlers.CustomMethod.postMessage({});

반응형