5

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

1
  • you have a url you use right? to call the js from the ios app? Commented Jun 16, 2015 at 12:03

2 Answers 2

3

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.

Sign up to request clarification or add additional context in comments.

Comments

-1

You could try to use URL query variables, like you would connect to PHP using Swift.

Here is an example of how to get query variables in Javascript: Get url parameter jquery Or How to Get Query String Values In js

Then when you run the Javascript you can check what the URL query variables are and then run a function based on that.

For example, we use the variable command below, to say what function to run:

example.com?command=foo

then do something like this in Javascript:

if(command == 'foo') {
   runFoo();
}

Then you could also use URL query variables to specify arguments for the function.

If you choose PHP

If you choose to use PHP, you can do the same thing with $_GET['command'];.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.