gpt4 book ai didi

javascript - Android JNI JavascriptCore JSEvaluateScript 随机给出解析错误

转载 作者:行者123 更新时间:2023-11-29 22:11:05 28 4
gpt4 key购买 nike

我是 JSCore 和 JNI 的新手(从 Android 的 Angular 使用 C++)。我想通过 JSEvaluateScript 函数评估 javascript。当我启动应用程序时,结果正常,但在我暂停应用程序或在应用程序打开时重新运行脚本后,它随机给出“语法错误:Pasre 错误”。奇怪的是,同一个脚本在重启时运行正常(这意味着脚本正常)。同样的脚本在 iOS 代码中与 JSCore 完美运行。

每次运行脚本之前我都会创建一个全局上下文并像这样缓存它:

static JSGlobalContextRef globalContext = JSGlobalContextCreate(NULL);

当我这样运行脚本时:

void runJS(JNIEnv* env, jstring jsString)
{
const char *cString = env->GetStringUTFChars(jsString, 0);
JSStringRef scriptJS = JSStringCreateWithUTF8CString(cString);
JSValueRef exception = NULL;
if(JSCheckScriptSyntax(globalContext,scriptJS,NULL,0,&exception))
{
JSValueRef returnedValue = JSEvaluateScript(globalContext, scriptJS, NULL, NULL, 0, &exception);

if (exception)
{
LOGD("runJS: JSEvaluateScript exception");
JSValuePrint(globalContext, exception, NULL);
}
}
else if (exception)
{
LOGD("runJS: JSCheckScriptSyntax exception");
JSValuePrint(globalContext, exception, NULL);
}

env->ReleaseStringUTFChars(jsString, cString);
JSStringRelease(scriptJS);
}

我一直在想用一个替代引擎替换完整的 Javascript 引擎。任何形式的帮助都会很棒..

编辑:

事实证明,我在一个线程中调用了 runJS,这会产生问题。但是我不能在主线程上运行它,因为我必须通过休眠线程来暂停 JS 解析操作,而休眠主线程会休眠所有内容。有什么想法吗?

最佳答案

约翰,

此类问题通常与同一上下文中不同线程中的多个并发执行有关。 JSC 不是线程安全的(对于相同的上下文),因此,请确保每个上下文同时执行的线程不超过一个。

关于javascript - Android JNI JavascriptCore JSEvaluateScript 随机给出解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17998181/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com