Android JNI JavascriptCore JSEvaluateScript随机给出解析错误
Android JNI JavascriptCore JSEvaluateScript giving Parse Error randomly
我是JSCore和JNI的新手(从Android的角度使用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引擎来取代整个Javascript引擎。任何形式的帮助都将是伟大的。。
编辑:
事实证明,我在一个产生问题的线程中调用runJS。但是我不能在主线程上运行它,因为我必须通过睡眠线程来暂停JS解析的操作,而睡眠主线程将睡眠所有内容。有什么想法吗?
John,
这种问题通常与同一上下文中不同线程中的多个并发执行有关。JSC不是线程安全的(对于相同的上下文),因此,请确保每个上下文同时执行的线程不超过一个。
相关文章:
- Ajax更新面板随机错误'PRM_MissingPanel'
- 随机jquery移动/角度内部错误与安卓浏览器
- 输出中的随机字符串错误
- Javascript:随机“对象没有方法”错误,即使使用 jquery.getScript()
- JQuery - 随机 .replace() 错误
- JQuery 幻灯片错误.图片在页面上列出,而不是随机播放.找不到错误
- 什么可能导致jQuery本身中随机出现的错误
- CRM 2011 Outlook Client 中的随机 JavaScript 错误
- MS JScript运行时错误,在2或3次警报后随机获取
- Javascript-随机图像错误
- Android JNI JavascriptCore JSEvaluateScript随机给出解析错误
- 尝试显示随机任务时出现对象HTMLInputElement错误
- 随机函数触发$digest()错误
- JavaScript画布:“;随机的“;碰撞检测错误
- javascript类型错误:随机不是chrome上的功能
- 随机得到ECONNREFUSED错误
- Javascript随机无法对项目进行排序,没有错误
- 为什么当我给他一个负数和一个正数时,我的 JS 随机整数生成器如此错误
- jQuery-随机图像生成器(修复我的代码,可能只是语法错误)
- 随机jquery ajax错误readyState=0