【问题标题】:Codename One - how to create webview communicate with native (iOS)代号一——如何创建webview与native(iOS)通信
【发布时间】:2020-11-17 11:37:11
【问题描述】:

我正在创建一个移动应用程序,其 UI 必须在 html/reactjs 中,并且业务逻辑必须在 Java 中。 Codename One 是不错的选择,但它的 UI 与 Swing 相似,所以我在想我可以将本地 html 加载到 webview 并让它与 Codename One 中的本机代码(Java)通信吗?

我找到了这个APIBrowserComponent,我将把RESTful请求和响应附加到浏览器窗口对象中,并使用它通过BrowserComponent API进行通信。

从native code(Java)到webview中执行javascript,我找到了这个API,但是从webview到执行native code(Java),有没有办法呢?

【问题讨论】:

标签: ios codenameone


【解决方案1】:

您使用导航侦听器,然后导航到一个众所周知的 URI,然后您可以将其映射到您想要的内容。见addBrowserNavigationCallback。有了它,您可以在回调中编写代码,例如:

bc.addBrowserNavigationCallback(url -> {
      switch(url) {
          case "method1://invoke": 
              callSerially(() -> method1()); 
              return false;
          case "method2://invoke": 
              callSerially(() -> method2()); 
              return false;
      }
      return true;
});

您可以在调用中传递参数,这将使此代码更加复杂,但要点是相同的。

注意callSerially 在这里是必不可少的,因为此方法会暴露浏览器导航线程并阻止它。你不应该抓住那个线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    相关资源
    最近更新 更多