Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JS calling a function in Swift

I know how to send message from JS to native IOS swift app:

func userContentController(userContentController: WKUserContentController!, didReceiveScriptMessage message: WKScriptMessage!) {

        println("JavaScript is sending a message \(message.body)")

}

and JS:

webkit.messageHandlers.callbackHandler.postMessage("Hello from JavaScript");

My question: is it possible to directly call a function in the native app rather then receiving the message in my example code.

say i want in the JS to use something like:

webkit.messageHandlers.someFunctionName()

The reason i am asking is that In Android thats how it works

like image 876
Michael A Avatar asked Oct 31 '22 01:10

Michael A


1 Answers

WKWebView supports only the raw message passing interface. You have to wrap it for complex interactions between JS and native.

I created a project named XWebView which offers language binding styled API based on the raw message passing of WKWebView. It's written in Swift.

For example, you can write a plugin in Swift:

class Plugin : NSObject {
    func someFunctionName() {
        doSomeThing()
    }
}

Expose an instance of the plugin to JavaScript before loading HTML:

let webView = WKWebView(frame: frame, configuration: WKWebViewConfiguration())
webView.loadPlugin(Plugin(), namespace: "foo")

Call the function from JavaScript:

window.foo.someFunctionName()

It's really easy and straightforward. For more details, please check the project's page.

like image 88
soflare Avatar answered Nov 15 '22 05:11

soflare