在Javascript中定義一個負責溝通的interface (i.e function),例如我們在javascript中定義一個sendMessage(message) function如下:
        <script type="text/javascript">
            function sendMessage(message) {
                document.getElementById("name").innerHTML = message
                return "Got it"
            }
        </script>
接受一個message參數,並回傳"Got it給App",App端則利用WKWebView提供的function evaluateJavaScript來傳遞message與接收回傳的結果與資料,詳細code如下:
        webView.evaluateJavaScript("sendMessage('swift message')") { (result, err) in
            print(result, err)
        }
我們需要利用WKWebViewConfiguration來定義interface讓網頁傳訊息給App,
        let configuration = WKWebViewConfiguration()        
        configuration.userContentController = WKUserContentController()
        configuration.userContentController.add(self, name: "ToApp")
        var webView = WKWebView(frame: self.view.frame, configuration: configuration)
在上述的程式碼中我們定義了"ToApp"的interface,然後我們App端也需要接收的code,接收的方式是利用WKScriptMessageHandler ,它提供了一個接收訊息的system callback didReceive 來接收message,詳細如下:
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        print(message.body)
    }
定義好了溝通的interface和接收的callback後,網頁的Javascript只需要在一個function中呼叫  window.webkit.messageHandlers.ToApp.postMessage("Send message to Swift")
這樣就可以發送訊息給App
Note: ToApp是我們定義的interface name, "Send message to Swift"是我們要傳送的訊息,剩下其他部分都是固定的
一樣提供範例,包含一個網頁範本,完整專案連結如下:
https://github.com/tgnivekucn/WKWebView2