Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

536
Vistas
CEF: cómo llamar a la devolución de llamada c ++ desde el código JS

¿Cómo puedo llamar a una función de C++ usando JavaScript?

Por ejemplo, estoy ejecutando código js en una ventana del navegador usando el método CefFrame::ExecuteJavaScript así:

 (*frame).GetMainFrame()).ExecuteJavaScript("const elem = document.getElementsByClassName("my_class")[0];const rect = elem.getBoundingClientRect(); alert(rect.x + \":\" + rect.y)", "", 1);

¿Es posible llamar de alguna manera a una función de C++ para el lugar de la función JS alert() ?

about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Se puede hacer de dos maneras. Son casi iguales: puede crear varias funciones nativas a la vez con CefRegisterExtension y puede crear una sola función nativa con CefV8Value::CreateFunction . El siguiente ejemplo es solo un boceto, no se puede probar en ninguna parte, es posible que haya pequeños problemas, pero la idea es clara:

 class MyAlertHandler : public CefV8Handler { public: bool Execute(const CefString& name, CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval, CefString& exception) override { if (!arguments.empty()) { // arguments[0]->GetStringValue(); } return true; } }; CefRefPtr<CefV8Handler> handler = new MyAlertHandler; CefRefPtr<CefV8Context> v8_context = frame->GetMainFrame()->GetV8Context(); if (v8_context.get() && v8_context->Enter()) { CefRefPtr<CefV8Value> global = v8_context->GetGlobal(); CefRefPtr<CefV8Value> my_alert = CefV8Value::CreateFunction("my_alert", handler); global->SetValue("my_alert", my_alert, V8_PROPERTY_ATTRIBUTE_READONLY); v8_context->Exit(); }

Se puede omitir llamar a Enter() y Exit() en un contexto V8 si se llama a CefV8Value::CreateFunction desde las funciones CefRenderProcessHandler .

 frame->GetMainFrame()->ExecuteJavaScript(R"( const elem = document.getElementsByClassName("my_class")[0]; const rect = elem.getBoundingClientRect(); my_alert(rect.x + ":" + rect.y);)", "", 1);
about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda