当前位置: 首页 > 面试题库 >

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

子车睿
2023-03-14
问题内容

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

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

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

问题答案:

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

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

使用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 调用函数



 类似资料:
  • 问题内容: 在iOS8中使用WKWebView,如何从本机端运行JavaScript函数或以其他方式从本机端与JavaScript通信?似乎没有类似于UIWebView的方法。 (我可以在该对象上使用,以允许从JS到本机进行通信,但是我正在寻找相反的方向。) 问题答案: (我在这里提出问题后不久就为此提出了雷达申请。) 几天前刚刚添加了一种新方法(感谢jcesarmobile指出): 添加 该方法

  • 有人能帮我了解一下这个代码片段的时间和空间复杂性吗?请参考leetcode问题-单词中断II。给定一个非空字符串s和一个包含非空单词列表的字典单词dict,在s中添加空格来构造一个句子,其中每个单词都是有效的字典单词。返回所有这些可能的句子。

  • 我正在尝试分析一个算法的时间复杂度。 下面的算法旨在只检查数组的一部分,所以如果它没有多大意义,请不要担心。 我对计算循环周围的时间复杂度很困惑,请看看我的评论。 这是否意味着我们有: T(N) = (C2 C4 C5)N (C1 C3 C6) T(N) = C7*N (C8) T(N)=N?? 循环中的所有内容都是*N? 先谢谢!

  • 我知道,对于迭代,递增。

  • 问题内容: 有什么办法可以看到JavaScript本机代码的声明吗?每当我尝试查看Chrome或Firefox中的本机功能时,都会显示“ ”: 这是什么意思,有什么工具可以帮助我阅读实际代码? 问题答案: Chrome或Firefox之所以说该代码是本地代码,是因为它确实是本地代码-WebKit和Firefox开发人员已使用C或C ++(而非JavaScript)对该功能进行了编码。但是,如果您想

  • 本文向大家介绍Android Fragment与Activity之间的相互通信实例代码,包括了Android Fragment与Activity之间的相互通信实例代码的使用技巧和注意事项,需要的朋友参考一下 Android Fragment与Activity之间的相互通信 前言 自从Android3.0引入Fragment之后,主要是为了支持动态灵活的界面设计和屏幕的适配问题。Fragmenty不