Return result from called function in iOS to calling function in WkWebView in JavaScript

Viewed 5786

We called a function in iOS from javascript i.e

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

I want to assign returned value in data variable from called method in iOS.

iOS Code :

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if(message.name == "callbackHandler") {
            print("JavaScript is sending a message \(message.body)")
            how to send data back??
        }
    }

can someone please tell me how to do it??

I know I can use evaluateJavascript to call back another method but due to some restriction I have to return result from same method.

3 Answers

Here is one approach:

Javascript:

function callNativeCode() {
    webkit.messageHandlers.callbackHandler.postMessage("Hello from JavaScript");
}

// this function will be later called by native code
function callNativeCodeReturn(returnedValue) {
    // do your stuff with returned value here
}

Swift:

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    if(message.name == "callbackHandler") {
        print("JavaScript is sending a message \(message.body)")
        webView.evaluateJavaScript("callNativeCodeReturn(0)")
    }
}

Of course this is not very elegant and not synchronous...

There is another approach with promises, you can find out more about it here: http://igomobile.de/2017/03/06/wkwebview-return-a-value-from-native-code-to-javascript/

Related