Using Javascript with WKWebView
WebKit allows us to use javascript along side with the native swift code. On one hand, we could call the javascript statements in swift. On the other hand, javascript from web view could be able to trigger a delegate method defined in swift code. This gives us a two way communication between the native swift code and javascript used by a web view.
Basic Setup
Here we have a window with a WKWebView showing some text. It has 2 buttons inside. One for showing the text and triggering a swift handler, the other for hiding the text. Also, we have a native button that triggers a javascript function to hide the text.

Triggering Javascript Functions from Swift
The IB outlet and action of the app as follow. Note that we simply use evaluateJavaScript(_:completionHandler:)
to trigger some javascript in the web view, hideText()
is a custom method we defined inside javascript.
Receiving Javascript Messages
To receive message from the javascript, we need to provide a message name for javascript to call upon. We just name it “jsHandler”. After that we load the html and javascript into the web view.
We also need to adopt the WKScriptMessageHandler
protocol in our view controller, and implement the userContentController(_:didReceive:)
method. For simplicity, we just print out the message received from the javascript.
The HTML and javascript we loaded as follow. Note that in the showText()
method, the window.webkit.messageHandlers.jsHandler.postMessage()
is the method we use to trigger the delegate method implemented in our view controller.