CEF C++调用JS

版权声明:www.gudianxiaoshuo.com (古典小说网) 今日头条号: 古典古韵古典小说、讨厌编程 https://blog.csdn.net/shuilan0066/article/details/83898013

CefBrowser 和 CefFrame 对象被用来发送命令给浏览器以及在回调函数里获取状态信息。

每个 CefBrowser 对象包含一个主 CefFrame 对象,主 CefFrame 对象代表页面的顶层 frame;

同时每个 CefBrowser 对象可以包含零个或多个的 CefFrame 对象,分别代表不同的子 Frame。

CefBrowser 和 CefFrame 对象在 Browser 进程和 Render 进程都有对等的代理对象。
 

可以通过 CBrowser 的实例得到其顶层 CefFrame 对象,然后通过它来调用 JavaScript 代码。

void CefNativeControl::ExecJavaScript(const CefString& js)
{
	if (browser_handler_.get() && browser_handler_->GetBrowser().get())
	{
		CefRefPtr<CefFrame> frame = browser_handler_->GetBrowser()->GetMainFrame();
		if (frame)
			frame->ExecuteJavaScript(js, L"", 0);
	}
}

c++ 调用方式

这里需要注意 参数用单引号隔开

jsFuncName('param1',  'param2',  'param3')

void CefNativeForm::CallJs(std::wstring funcName, std::wstring cmdStr)
{


	CefString js_string = funcName+ L"('" + cmdStr + L"');";
	cef_control_->ExecJavaScript(js_string);
}
void  CefNativeForm::CallJs(std::wstring funcName, std::wstring param1, std::wstring param2)
{
	CefString js_string = funcName + L"('" + param1 + L"','" + param2 + L"');";
	cef_control_->ExecJavaScript(js_string);
}
void CefNativeForm::CallJs(std::wstring funcName, std::wstring param1, std::wstring param2, std::wstring param3)
{
	CefString js_string = funcName + L"('" + param1 + L"','" + param2 + L"','" + param3 + L"');";
	cef_control_->ExecJavaScript(js_string);
}

比如,c++ 点击某个按钮时,调用JS

	if (name==L"setBtn")
	{
	//	CallJs(L"receiveMessage",L"dd");  //funcName  param

	//	CallJs(L"dd");                    //param

		CallJs(L"Test2",L"hello",L"cef"); //funcName  param1, param2
	}
	

网页中的JS示例

    <script language="JavaScript">


        // 写一个JS函数,让C++可以通过调用这个函数控制网页
        function receiveMessage(param) {
         document.getElementById("result").value = "收到来自C++的消息:" + param;
        }


        function Test2(param1,param2) {
         document.getElementById("result").value = "参数1:" + param1 +"  参数2:" + param2;
        }

    </script>





<fieldset style="margin-top:20px;border-color:#E2DED6;border-width:1px;border-style:Solid;">
    <legend style="color:#333333;font-size:0.8em;font-weight:bold;">
        C++调用JS测试
    </legend>

    <div style="margin-left:10px">
        收到C++发来的的文本:
        <br/><textarea rows="2" cols="40" id="result"></textarea>
    </div>
</fieldset>

参考资料:

https://blog.csdn.net/u012814856/article/details/76595871

https://blog.csdn.net/mfcing/article/details/44539035

猜你喜欢

转载自blog.csdn.net/shuilan0066/article/details/83898013
CEF
今日推荐