示例#1
0
void DLLCALL js_EvalOnExit(JSContext *cx, JSObject *obj, js_callback_t* cb)
{
	char*	p;
	jsval	rval;
	JSObject* script;
	BOOL	auto_terminate=cb->auto_terminate;
	JSObject	*glob=JS_GetGlobalObject(cx);
	global_private_t *pt;
	str_list_t	list;

	if(glob==obj) {
		pt=(global_private_t *)JS_GetPrivate(cx,JS_GetGlobalObject(cx));		
		list=pt->exit_func;
	}
	else
		list=JS_GetPrivate(cx,obj);

	cb->auto_terminate=FALSE;

	while((p=strListPop(&list))!=NULL) {
		if((script=JS_CompileScript(cx, obj, p, strlen(p), NULL, 0))!=NULL) {
			JS_ExecuteScript(cx, obj, script, &rval);
		}
		free(p);
	}

	strListFree(&list);
	if(glob != obj)
		JS_SetPrivate(cx,obj,NULL);
	else
		pt->exit_func=NULL;

	if(auto_terminate)
		cb->auto_terminate = TRUE;
}
示例#2
0
void DLLCALL js_EvalOnExit(JSContext *cx, JSObject *obj, js_branch_t* branch)
{
    char*	p;
    jsval	rval;
    JSScript* script;

    while((p=strListPop(&branch->exit_func))!=NULL) {
        if((script=JS_CompileScript(cx, obj, p, strlen(p), NULL, 0))!=NULL) {
            JS_ExecuteScript(cx, obj, script, &rval);
            JS_DestroyScript(cx, script);
        }
    }

    strListFree(&branch->exit_func);
}