一尘不染

WKWebview-Javascript与本机代码之间的复杂通信

swift

在WKWebView中,我们可以使用webkit消息处理程序来调用ObjectiveC / swift代码,例如:
webkit.messageHandlers.<handler>.pushMessage(message)

它非常适合没有参数的简单javascript函数。但;

  1. 是否可以使用JS回调函数作为参数来调用本机代码?
  2. 是否可以从本机代码向JS函数返回值?

阅读 190

收藏
2020-07-07

共1个答案

一尘不染

不幸的是,我找不到本机解决方案。

但是以下解决方法解决了我的问题

使用JavaScript Promise,您可以从iOS代码中调用resolve函数。

更新

这是您可以使用诺言的方式

在JS中

   this.id = 1;
    this.handlers = {};

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

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

在iOS中

window.onMessageReceive使用适当的处理程序ID 调用函数

2020-07-07