Есть ли способ остановить или приостановить выполнение 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, но также и обратный вызов, который будет вызываться регулярно для определения необходимости остановки выполнения.
Вы можете найти больше информации в моем ответе на этот вопрос.