Обратный вызов в родном обмене сообщениями

У меня есть собственное приложение на Java и расширение Chrome. Поездка туда и обратно моего приложения выглядит следующим образом:

  1. JavaScript инициирует вызов собственного приложения.
  2. Родное приложение читает поток и выполняет некоторые вычисления.
  3. Нативное приложение должно вызвать функцию JS и получить ее результат для дальнейших вычислений.
  4. Если нативное приложение вызывает JS (путем отправки сообщения через расширение), то что происходит?

Я знаю, что я вызываю обратный вызов с помощью JS позже, когда вызов выполнен, но как я могу ждать здесь, на стороне Java, чтобы получить результат? Раньше у меня был апплет, и я использовал объект FutureTask, но как вы думаете, можно ли здесь также создать FutureTask?

Большое спасибо.


person Reza Ahmadi    schedule 16.07.2015    source источник
comment
Просто добавьте некоторый код, и мы сможем найти любые ошибки или дальнейшие шаги. Используя веб-драйвер Selenium, это возможно.   -  person Sai    schedule 17.07.2015


Ответы (1)


Когда вашему процессу требуется более одного сообщения от JS к собственному приложению (и обратно), простое решение — включить запрос транзакции и идентификатор транзакции, чтобы обеспечить непрерывность различных задач. Таким образом, ваше собственное приложение на Java не будет «ждать» конкретно второго сообщения, но будет ждать любого сообщения. Он просто сможет определить, является ли полученное сообщение продолжением предыдущего сообщения или новым.

Например

  1. От JS до родного приложения сообщение JSON может выглядеть примерно так:

    {"transaction_id":"123","запрос":"дайте_мне_ваше_имя"}

  2. Ответ собственного приложения на JS:

    {"transaction_id":"123","ответ":"Джон"}

  3. Последовательный запрос JS к нативному приложению:

    {"transaction_id":"123","запрос":"do_something"}

  4. Ответ собственного приложения на JS:

    {"transaction_id":"123","ответ":"хорошо"}

Ваш код JS и собственного приложения должен будет действовать в соответствии с запросами и ответами для данного идентификатора транзакции.

person H Lopez    schedule 09.08.2015