前言:
如今兄弟们对“js传输文件”可能比较讲究,小伙伴们都想要了解一些“js传输文件”的相关内容。那么小编在网络上汇集了一些有关“js传输文件””的相关文章,希望姐妹们能喜欢,姐妹们快快来学习一下吧!需求
有这么个需求: CEF浏览器上,点击一个按钮,要求弹出一个原生对话框,在这个原生对话框上,加载CEF浏览器传来的网址。
这个就涉及到了JS给C++传送信息,也就是JS调用C++功能。
JS写法
NimCefWebInstance.call('CEF_SendToCppExerciseInfo',{url},(error,result)
其中,NimCefWebInstance是CEF V8引擎中定义的一个对象,
CEF_SendToCppExerciseInfo 是注册在V8引擎中的C++方法名,
{url}是参数,
(error,result)=>{ }是回调信息
细节不用去管,这句话的意思就是告诉浏览器,我这是调用的C++函数,并给这个函数传递相应参数信息
<script language="JavaScript"> function sendCppDomain(){ var url=document.getElementById("url").value; NimCefWebInstance.call('CEF_SendToCppExerciseInfo',{url},(error,result)=>{ }); } </script>
详细如下:
<html><head> <meta charset="utf-8" /> <title>给C++发送信息</title> <script language="JavaScript"> function sendCppDomain(){ var url=document.getElementById("url").value; NimCefWebInstance.call('CEF_SendToCppExerciseInfo',{url},(error,result)=>{ }); } </script></head><body bgcolor="white"><fieldset> <legend>给c++传送网址信息</legend> <div style="margin-left:10px"> <input type="text" id="url" value=";> <br/> <input type="button" onclick="sendCppDomain()"; value="发送给c++"> </div></fieldset></body></html>
点击后,将网址发送给C++,
C++ 端
在CEF浏览器中注册C++方法名,并对应具体的实现函数。
注册C++方法名,就是告诉浏览器引擎,我自己定义了一个名为某某某的方法,这样,JS中调用这个方法时,浏览器就会识别出来,并转到对应的自定义实现函数中去。
//提供给JS调用的C++函数 pBaseCef->AttachAfterCreated([this, pBaseCef](CefRefPtr<CefBrowser> browser){ pBaseCef->RegisterCppFunc(L"CEF_SendToCppExerciseInfo", nbase::Bind(&ChatroomForm::CefCppFunc_ReceiveExerciseInfoFromJs, this, std::placeholders::_1, std::placeholders::_2)); } );
void ChatroomForm::CefCppFunc_ReceiveExerciseInfoFromJs(const std::string& params, nim_cef::ReportResultFunction callback) { std::wstring tmp = nbase::UTF8ToUTF16(params); Json::Value values; Json::Reader reader; //JS传来的参数params if (reader.parse(params.c_str(), values)) { std::string url = values["url"].asString(); pExerciseForm->LoadUrl(nbase::UTF8ToUTF16(url)); pExerciseForm->ShowWindow(true); pExerciseForm->ToTopMost(true); if (callback) callback(true, values.toStyledString()); } }
标签: #js传输文件