版权声明: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>
参考资料: