¿Hay alguna forma de detener o pausar la ejecución de Javascript en un objeto JSContext?
ios cocoa (3)
En realidad, hay una API que permite detener la ejecución de código Javascript dentro de JavascriptCore. Sin embargo, desafortunadamente, es privado y, por lo tanto, no se puede usar dentro de las aplicaciones que se distribuirán a través de la App Store.
La API en cuestión es la función JSContextGroupSetExecutionTimeLimit
definida en JSContextRefPrivate . No solo permite especificar un tiempo de espera para su código JS, sino también una devolución de llamada que se llamará regularmente para determinar si se debe detener la ejecución.
Puede encontrar más información en mi respuesta a this pregunta de SO.
Estoy desarrollando una aplicación iOS 7 que tiene capacidades de scripting usando JavascriptCore.
Me gustaría tener una forma de pausar o detener completamente el código que se ejecuta actualmente en el JSContext. JavascriptCore no está muy bien documentado, así que no pude encontrar una respuesta.
Tengo algunas ideas:
- Elimine del contexto el objeto de puente utilizado para interactuar con mi aplicación y simplemente deje que cualquier código que todavía se esté ejecutando falle.
- Obtener el JSGlobalContextRef para mi JSContext y liberarlo usando JSGlobalContextRelease y volver a crear un JSContext para usar.
Pero esperemos que haya mejores formas.
Cualquier ayuda sería apreciada. ¡Gracias!
Si aún es relevante, puede crear un bucle que agregue el contador (que aumenta después de cada ciclo) y el valor máximo del contador. Supongo que puedes usar un segundo núcleo, ya que se llama javascript core . En este segundo núcleo puede poner una función que aumenta el valor del contador en 10, por lo que excede el valor máximo del contador y el código continuará. No necesita un segundo núcleo si puede llamar a 2 funciones a la vez.
De lo contrario, puede almacenar todo con un nombre diferente y sobrescribir los antiguos sin nada.
u puede utilizar la devolución de llamada de tiempo de espera de script java cuando se activa el objeto 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>