0

在我的电子应用程序中,我使用 Node-addon 创建一个窗口,我想在窗口大小发生变化时调用一个 js 函数。

首先我尝试使用自定义的异步回调,但它不起作用,登录js的回调函数没有打印。我不知道是我的问题还是异步回调无法处理它。

然后我使用异步线程安全函数。当我使用 call_js_cb 参数创建它时无法调用 JS 回调。我在 call_js_cb 中调用 JS 回调,但它返回 napi_invalid_args。详细信息显示在下面的代码中。


void onWindowEventForJS(napi_env env,napi_value js_callback,void* context,void* data) {
    napi_status status;
    napi_value param;
    napi_value ret;
    status = napi_create_int32(env, 10, &param);//napi_ok,
    status = napi_call_function(env, nullptr, js_callback,1,param, &ret);
    //status is napi_invalid_args
    //js_callback type is function,env can create an int value.I don't know which arg was wrong.
    //my guess is that js_callback exists in a different env.
    
}

void NativeWindow::setSizeChangeCallback(napi_env env, napi_callback_info info)
{
    napi_status status;
    napi_value params[2];
    size_t argc = 2;
    status = napi_get_cb_info(env, info, &argc, params, NULL, NULL);

    _asyncResource = params[0];
    _sizeChangeCallback = params[1];

    napi_value name;
    napi_create_string_utf8(env, "native2", NAPI_AUTO_LENGTH, &name);

    status = napi_create_threadsafe_function(env, params[1], _asyncResource, name,0,1,nullptr, nullptr,this, onWindowEventForJS,&_safe_callback);
}

有线的事情是,当我使用nullptr替换onWindowEventForJS时,可以调用JS回调。但是我需要将参数传递给JS回调。

有人帮忙~~~

4

0 回答 0