有没有办法在JSContext对象中停止或暂停执行Javascript?

时间:2014-02-13 09:58:33

标签: javascript ios cocoa webkit javascriptcore

我正在开发一个使用JavascriptCore具有脚本功能的iOS 7应用程序。

我想有办法暂停或完全停止当前在JSContext上运行的代码。 JavascriptCore没有很好的文档,所以我找不到答案。

我有一些想法:

  • 从上下文中删除用于与我的应用程序交互的桥接对象,让任何代码仍然运行失败。
  • 获取JSContext的JSGlobalContextRef并使用JSGlobalContextRelease释放它并重新创建要使用的JSContext。

但希望有更好的方法。

任何帮助将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:1)

实际上有一个API允许停止在JavascriptCore内部执行Javascript代码。不过遗憾的是,它是私有的,因此不能在要通过App Store分发的应用程序中使用。

有问题的API是JSContextRefPrivate中定义的JSContextGroupSetExecutionTimeLimit函数。不仅允许为您的JS代码指定超时,而且还允许定期调用回调以确定是否应停止执行。

您可以在我对this这样的问题的答案中找到更多信息。

答案 1 :(得分:0)

如果仍然相关,您可以创建一个循环来添加计数器(在每个循环后上升)和计数器的最大值。我假设您可以使用第二个核心,因为它被称为javascript 核心。在第二个核心中,您可以放置​​一个函数,将计数器的值增加10,使其超过计数器的最大值,因此代码将继续。如果一次可以调用2个函数,则不需要第二个核心。

否则,您可以使用不同的名称存储所有内容,并且无需覆盖旧的名称。

答案 2 :(得分:-1)

当触发JSContext对象时,你可以使用java脚本超时回调

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>