MFC调用cef
1、初始化
m_callBack 是为了将消息返回到主界面的回调类
1 int CCEFLibrary::InitCef(CCefCallback* callBack) 2 { 3 m_callBack = callBack; 4 CefRefPtr<ClientAppRender> app(new ClientAppRender()); 5 CefSettings settings; 6 //settings.command_line_args_disabled = TRUE; 7 settings.no_sandbox = 0; 8 CefSettingsTraits::init(&settings); 9 settings.multi_threaded_message_loop = true; 10 settings.remote_debugging_port = 8088;//如果不定义,则不能运行调试工具 11 //settings.single_process = true; 12 13 CefMainArgs mainArgs; 14 CefRefPtr<CefApp> cefApp; 15 cefApp = app; 16 17 CefInitialize(mainArgs, settings, cefApp, NULL); 18 return 0; 19 }
2、展示页面
函数的index 是为了项目需要额外添加的 索引,一般直接使用else里面的代码内容即可;
1 int CCEFLibrary::CreateBrowser(int index, RECT rect, HWND hWnd, const std::wstring & url) 2 { 3 std::map<int, CefRefPtr<CSimpleClient>>::iterator itr = m_MapSimpleClient.find(index); 4 if (itr != m_MapSimpleClient.end()) 5 { 6 itr->second->GetBrowser()->GetMainFrame()->LoadURL(url); 7 //m_simpleClient->GetBrowser()->GetMainFrame()->LoadURL(cefStrUrl); 8 } 9 else 10 { 11 CefRefPtr<CSimpleClient> client(new CSimpleClient()); 12 client->SetCallBack(m_callBack); 13 m_MapSimpleClient[index] = client; 14 15 CefWindowInfo winInfo; 16 winInfo.SetAsChild(hWnd, rect); 17 const CefString cefStrUrl(url); 18 CefBrowserSettings browserSettings; 19 browserSettings.web_security = STATE_DISABLED; 20 CefBrowserHost::CreateBrowser(winInfo, client, cefStrUrl, browserSettings, NULL, NULL); 21 22 23 } 24 return 0; 25 }
3、MFC调用js
test.html
1 <!DOCTYPE html> 2 <html> 3 <!-- 4 Copyright (c) 2016 foruok. All rights reserved. 5 欢迎关注foruok的微信订阅好“程序视界”。 6 --> 7 <head> 8 <script type="text/javascript"> 9 function Login(){ 10 window.NativeLogin(document.getElementById("userName").value, document.getElementById("password").value); 11 } 12 function GetId2(){ 13 GetId(2); 14 } 15 function GetId(i) 16 { 17 alert("get id from native by extensions i:" + i); 18 return "i"; 19 } 20 </script> 21 <title>CEF JS Integration</title> 22 </head> 23 24 <body> 25 <h3>Call into native by Window bindings:</h3> 26 <form> 27 UserName: <input type="text" id="userName" /> Password: 28 <input type="text" id="password" /> <input type="button" value="Login" onclick="Login()"/> 29 </form> 30 <hr> 31 <h3>Call into native by js extensions:</h3> 32 <input type="button" value="GetId2" onclick="GetId2()"/> 33 34 </html>