2016-09-21 2 views
2

В настоящее время у меня есть внешний код Javascript (, который выполняется асинхронно), что приложение iOS взаимодействует и может оценивать части условно. Прямо сейчас, когда функции Javascript возвращаются, они возвращают «обещание» iOS-приложению, которое необходимо разрешить. Есть ли способ разрешить обещание в iOS через JavascriptCore; или я сражаюсь с проигравшей битвой здесь и должен ли я вместо этого «разрешать» все «обещания» в Javascript перед возвратом ценностей обратно в iOS?Решение javascript в iOS с использованием JavascriptCore

ответ

0

Посмотрите на эту библиотеку: https://github.com/marcuswestin/WebViewJavascriptBridge как минимум в качестве примера.

Он не управляет js Обещание как результат JS в собственном коде, который, как я думаю, невозможен, но он реализует способ управления асинхронными вызовами JS из собственного кода.

Если я не ошибаюсь, основная логика для управления асинхронной JS называет это:

  1. Когда нативный код должен вызвать метод асинхронной JS, он сохраняет нативную функцию обратного вызова в реестре обратных вызовов и присвоить ему идентификатор ,
  2. Затем он вызывает метод JS, передающий идентификатор обратного вызова.
  3. Когда метод async JS заканчивается (используя Promise или что-то еще), он вызывает собственный код с использованием того же идентификатора обратного вызова.
  4. Это позволяет собственному коду вызывать обратный вызов, хранящийся в реестре.

Библиотека хорошо структурирована, позволяя зарегистрировать регистратор и т. Д., Но я думаю, что исходная логика для Native -> JS-вызовов в основном такова.

Смежные вопросы