Clement Clement - 1 year ago 376
iOS Question

WKWebview - Complex communication between Javascript & native code

In WKWebView we can call ObjectiveC/swift code using webkit message handlers


It works well for simple javascript functions without parameters. But;

  1. Is it possible to call native code with JS callback function as parameters?

  2. Is it possible to return a value to JS function from native code?

Answer Source

Answer to both of my question is NO

The solution

Use javascript promises & you can call the resolve function from your iOS code.


This is how you can use promise

In JS = 1;
    this.handlers = {};

    window.onMessageReceive = (handle, error, data) => {
      if (error){
      delete this.handlers[handle];

  sendMessage(data) {
    return new Promise((resolve, reject) => {
      const handle = 'm'+;
      this.handlers[handle] = { resolve, reject};
      window.webkit.messageHandlers.<yourHandler>.postMessage({data: data, id: handle});

in iOS

Call the window.onMessageReceive function with appropriate handler id

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download