Есть ли способ остановить или приостановить выполнение Javascript в объекте JSContext?

Я разрабатываю приложение iOS 7, которое имеет возможности сценариев с помощью JavascriptCore.

Я хотел бы иметь возможность приостановить или полностью остановить код, который в настоящее время работает в JSContext. JavascriptCore не очень хорошо документирован, поэтому я не смог найти ответ.

У меня есть несколько идей:

  • Удалите из контекста объект-мост, используемый для взаимодействия с моим приложением, и просто пусть все еще работает.
  • Получение JSGlobalContextRef для моего анонимного контента и его выпуск с использованием JSGlobalContextRelease и воссоздание используемого JSContext.

но, надеюсь, есть лучшие способы.

Любая помощь будет оценена по достоинству. Спасибо!

Ответы

Ответ 1

Если все еще актуально, вы можете создать цикл, который добавит счетчик (который будет расти после каждого цикла) и максимальное значение счетчика. Я предполагаю, что вы можете использовать второе ядро, так как оно называется javascript core. В этом втором ядре вы можете поместить функцию, которая увеличивает значение счетчика на 10, чтобы оно превышало максимальное значение счетчика, и поэтому код будет продолжен. Вам не требуется второе ядро, если вы можете одновременно вызывать 2 функции.

В противном случае вы можете хранить все под другим именем и ничего не перезаписывать старыми.

Ответ 2

u может использовать обратный вызов таймаута java script при срабатывании объекта JSContext

function myFunction() {
    alert('wait is over');
}
<!DOCTYPE html>
<html>
<body>


<button onclick="setTimeout(myFunction, 3000);">Click Me</button>
<!-- In this context im using a simple button to trigger the call back in your case u can triggeer on jscontext-->

</body>
</html>

Ответ 3

На самом деле есть API, который позволяет остановить выполнение кода Javascript внутри JavascriptCore. К сожалению, он является частным и поэтому не может использоваться в приложениях, которые должны распространяться через App Store.

Рассматриваемый API - это функция JSContextGroupSetExecutionTimeLimit определенная в JSContextRefPrivate. Это позволяет не только указать время ожидания для вашего кода JS, но также и обратный вызов, который будет вызываться регулярно для определения необходимости остановки выполнения.

Вы можете найти больше информации в моем ответе на этот вопрос.