【问题标题】:Callback in Native Messaging本机消息中的回调
【发布时间】:2025-12-16 06:45:01
【问题描述】:

我有一个 Java 原生应用和一个 Chrome 扩展程序。 我的应用程序的往返是这样的:

  1. JavaScript 发起对 Native App 的调用。
  2. 原生应用读取流并进行一些计算。
  3. 原生应用需要调用一个 JS 函数,并且需要它的结果来做进一步的计算。
  4. 如果原生应用调用JS(通过扩展发送消息),会发生什么?

我知道我稍后会在调用完成后通过 JS 调用 call 回调,但是我如何在 Java 端等待返回结果呢?之前我有一个Applet,并且习惯使用FutureTask对象,但是你认为这里也可以创建一个FutureTask吗?

非常感谢。

【问题讨论】:

  • 只需添加一些代码,我们就可以找到任何错误或进一步的步骤。使用 Selenium 网络驱动程序是可能的。

标签: javascript java google-chrome callback chrome-native-messaging


【解决方案1】:

当您的流程需要从 JS 到本机应用程序(并返回)的多个消息时,一个简单的解决方案是包含一个事务请求和一个事务标识符,以允许不同任务的连续性。因此,您在 Java 中的本机应用程序不会专门“等待”第二条消息,而是会等待任何消息。它只是能够判断收到的消息是前一条消息的延续还是新消息。

例如

  1. 从 JS 到 Native 应用,JSON 消息可能是这样的:

    {"transaction_id":"123","re​​quest":"give_me_your_name"}

  2. 原生应用对 JS 的响应:

    {"transaction_id":"123","re​​sponse":"john"}

  3. JS 对原生应用的连续请求:

    {"transaction_id":"123","re​​quest":"do_something"}

  4. 原生应用对 JS 的响应:

    {"transaction_id":"123","re​​sponse":"ok"}

您的 JS 和本机应用程序代码需要根据给定 transaction_id 的请求和响应采取相应行动。

【讨论】: