龙空技术网

CEF系列: 使用JS向CEF传送信息

济南风光 108

前言:

如今兄弟们对“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传输文件