Javascript CEFF8Handler回调函数Execute的参数无效

Javascript CEFF8Handler回调函数Execute的参数无效,javascript,c++,windows,chromium-embedded,Javascript,C++,Windows,Chromium Embedded,我使用CEF web浏览器内核取代IE浏览器ActivcX,以支持跨平台 昨天,我发布了一个线程,请求支持CEF框架中的Javascript回调方法window.external.xxx Czarek Tomczak的示例代码解决了我的问题。谢谢沙雷克·托姆扎克 现在,JavaScript函数可以调用我的C++函数。但我认为还有一个问题。当我收到CefV8handler执行回调函数时 virtual bool Execute(const CefString& name, CefRefPt

我使用CEF web浏览器内核取代IE浏览器ActivcX,以支持跨平台

昨天,我发布了一个线程,请求支持CEF框架中的Javascript回调方法
window.external.xxx

Czarek Tomczak的示例代码解决了我的问题。谢谢沙雷克·托姆扎克

现在,JavaScript函数可以调用我的C++函数。但我认为还有一个问题。当我收到CefV8handler执行回调函数时

virtual bool Execute(const CefString& name, CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval, CefString& exception);
virtualbool-Execute(const-CefString&name、cefreftr对象、const-CefV8ValueList&arguments、cefreftr&retval、CefString&exception);
我发现name和object参数包含值,而arguments参数不包含值

我的javascript代码是这样的

<script>
        function test() {
            alert(window.external.testlibcef("111111111"));
        }
</script>

功能测试(){
警报(window.external.testlibcef(“111111111”);
}
CefRenderProcessHandler函数OnContextCreated中的代码如下

CefRefPtr<CefV8Value> ptrGlobalObj = context->GetGlobal();
CefRefPtr<CefV8Value> ptrExternal = CefV8Value::CreateObject(NULL);
CefRefPtr<CefV8Handler> ptrV8Handler = new TcCefV8Handler();
CefRefPtr<CefV8Value> jsTestlibcef = CefV8Value::CreateFunction(_T("testlibcef"), ptrV8Handler);
ptrExternal->SetValue(_T("testlibcef"), jsTestlibcef, V8_PROPERTY_ATTRIBUTE_NONE);
ptrGlobalObj->SetValue("external", ptrExternal, V8_PROPERTY_ATTRIBUTE_NONE);
cefreftr ptrGlobalObj=context->GetGlobal();
cefreftr ptrExternal=CefV8Value::CreateObject(NULL);
CefRefPtr ptrV8Handler=新的TCCEFF8Handler();
CefRefPtr jsTestlibcef=CEFW8Value::CreateFunction(_T(“testlibcef”),ptrV8Handler);
ptrExternal->SetValue(_T(“testlibcef”)、jsTestlibcef、V8_属性_属性_无);
ptrGlobalObj->SetValue(“外部”,ptrExternal,V8_属性_属性_无);

有什么我遗漏的吗?

“参数”必须包含参数列表。你确定不是吗?你是怎么测试的?顺便说一句,您应该记住,CefV8Handler是在渲染器进程中执行的。这意味着它的代码必须以某种方式与主浏览器进程通信。@alexeibs我运行一个由golang编写的http服务器。我让我的cef浏览器加载页面并单击页面上的按钮。按钮将响应OnCutton事件并调用我的C++函数。我使用从cef office网站下载的cefsimple项目。我更改了一些代码以加载我的测试页面。我的项目是基于MFC框架的。一开始,我认为这将由MFC框架引起。因此,我将cefsimple示例从基本WinSDK更改为MFC框架(基于对话框)。但它仍然运行良好。所以,我不知道是怎么回事。有一个非常奇怪的场景是,execute回调函数的五个参数,只是参数是错误的,其他的都是正常的。您的http服务器与此无关。我指的是铬的多进程架构。你没有回答我的问题“你是如何测试它的?”。是否将调试器附加到渲染器进程?我这样问是因为我自己也使用了CEF JS集成,我的V8处理器工作正常。@alexeibs谢谢你的回答。我已经解决了这个问题。我在调试环境中使用了release cef dll和cef_dll_包装器静态库。但我还是不知道为什么。我构建了一个发布exe文件来测试它,这是我以前没有做过的。而且效果很好。因此,我在调试环境中将cef库替换为调试版。真是个错误。