有啥方法可以停止或暂停 JSContext 对象中 Javascript 的执行?

Posted

技术标签:

【中文标题】有啥方法可以停止或暂停 JSContext 对象中 Javascript 的执行?【英文标题】:Is there any way stopping or pausing the execution of Javascript in a JSContext object?有什么方法可以停止或暂停 JSContext 对象中 Javascript 的执行? 【发布时间】:2014-02-13 09:58:32 【问题描述】:

我正在开发一个 ios 7 应用程序,该应用程序具有使用 javascriptCore 的脚本功能。

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

我有几个想法:

从上下文中删除用于与我的应用交互的桥对象,并让仍在运行的任何代码失败。 为我的 JSContext 获取 JSGlobalContextRef 并使用 JSGlobalContextRelease 释放它并重新创建一个 JSContext 以供使用。

但希望有更好的方法。

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

【问题讨论】:

不确定这是否相关,但使用生成器应该提供一种机制来启动和停止应用程序的整体执行,但需要您以这样一种方式开发代码来促进这一点。跨度> 您好,您有好的解决方案吗? 【参考方案1】:

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

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

您可以在我对this SO 问题的回答中找到更多信息。

【讨论】:

这种方式不行,请您看看这个:github.com/phoboslab/JavaScriptCore-iOS/issues/…【参考方案2】:

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

否则,您可以用不同的名称存储所有内容,然后什么都没有覆盖旧的。

【讨论】:

【参考方案3】:

当触发 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>

【讨论】:

以上是关于有啥方法可以停止或暂停 JSContext 对象中 Javascript 的执行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中停止 JSContext 评估?

在 Windows 服务中,停止和暂停有啥区别?

有啥方法可以捕获页面刷新并暂停它?

如何捕捉 SKScene 暂停或 audioEngine 停止的时刻?

线程的停止和暂停

播放背景音乐,用户可以停止或重新启动或暂停音乐