代号一 - 如何创建 webview 与原生通信 (iOS)

Codename One - how to create webview communicate with native (iOS)

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

我找到了这个 API BrowserComponent,我打算在浏览器 window 对象中附加 RESTful 请求和响应,并使用它通过 BrowserComponent 进行通信API.

从本机代码(Java)在webview中执行Java脚本,我发现这个API,但是从webview执行本机代码(Java),有办法吗?

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

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

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

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