Если кому-то нужен пример, вот один из способов, которым я это сделал:
Определите пользовательский «протокол», который вы хотите использовать, вот пример в виде строки макроса #define PROTO_MYAPPCOMMAND «myapp://»
В вашем пользовательском классе CefApp (тот, который наследуется от CefApp), также наследуйте от CefRenderProcessHandler.
реализовать функцию OnBeforeNavigation():
//declare (i.e. in header)
virtual bool OnBeforeNavigation(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame, CefRefPtr<CefRequest> request,
NavigationType navigation_type, bool is_redirect) OVERRIDE;
//implementation
bool CClientApp::OnBeforeNavigation(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame, CefRefPtr<CefRequest> request,
NavigationType navigation_type, bool is_redirect)
{
CefString cefval = request->GetURL();
CString csval = cefval.c_str();
if (csval.Find(PROTO_MYAPPCOMMAND, 0) == 0)
{
//process the command here
//this is a command and not really intended for navigation
return true;
}
return false; //true cancels navigation, false allows it
}
Вот пример добавления кнопки «выход» приложения:
в cpp
#define STR_COMMANDAPPEXIT _T("command.appexit")
bool CClientApp::OnBeforeNavigation(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, CefRefPtr<CefRequest> request, NavigationType navigation_type, bool is_redirect)
{
CefString cefval = request->GetURL();
CString csval = cefval.c_str();
if (csval.Find(PROTO_MYAPPCOMMAND, 0) == 0)
{
CString command = url;
command.Replace(PROTO_MYAPPCOMMAND, _T(""));
if (command.Find(STR_COMMANDAPPEXIT, 0) == 0)
{
::PostMessage(hwnd, WM_CLOSE, NULL, NULL);
}
//this is a command and not really intended for navigation
return true;
}
return false; //true cancels navigation, false allows it
}
также создал файл утилиты js для всех операций, чтобы упростить их вызов
var MYHOST = MYHOST || {};
/// Exit the Application (host app)
MYHOST.ExitApp = function() {
window.location = 'myapp://command.appexit';
};
на страницах js (т.е. при нажатии кнопки/div)
<div class="exitbutton" onclick="MYHOST.ExitApp();">Exit</div>
Если вам нужно передать параметры, просто добавьте их в URL-адрес в js и проанализируйте строку в cpp, например:
MYHOST.DoSomething = function() {
window.location = 'myapp://command.dosomething?param1=' + value1 + "¶m2=" + value2 + "¶m3=" + value3;
};
примечание: я упростил код, но, пожалуйста, добавьте проверки и т. д.
Надеюсь это поможет!
person
mickeymicks
schedule
16.01.2014