I have the following function, which is called in the central Execute() function by the JavaScript callback
Code: Select all
function SendExecuteToMainProcess: Boolean;
var
ProcMsg : ICefProcessMessage;
counter: Integer;
value: ICefv8Value;
begin
ProcMsg := TCefProcessMessageRef.New(MSG_EXECUTE_TO_MAIN);
ProcMsg.ArgumentList.SetString(0, name);
//ProcMsg.ArgumentList.SetValue(1, Cefv8ToCef(obj));
ProcMsg.ArgumentList.SetInt(1, Length(arguments));
counter := 2;
for value in arguments do
begin
ProcMsg.ArgumentList.SetValue(counter, Cefv8ToCef(value));
counter := counter + 1;
end;
Result := TCefv8ContextRef.Current.Browser.SendProcessMessage(PID_BROWSER, ProcMsg);
end;
Code: Select all
procedure TDVCefBridge.RenderProcessHandler_OnProcessMessageReceivedEvent(const pBrowser : ICefBrowser;
uSourceProcess : TCefProcessId;
const pMessage : ICefProcessMessage);
var
callName: string;
callObj: ICefv8Value;
callArguments: TCefv8ValueArray;
caLength: Integer;
i: Integer;
begin
ShowMessage(IntToStr(GetCurrentProcessId));
CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_INFO, 'OnProcessMessageReceivedEvent Begin');
if (pMessage = nil) or (pMessage.ArgumentList = nil) then exit;
if pMessage.Name = MSG_EXECUTE_TO_MAIN then
begin
callName := pMessage.ArgumentList.GetString(0);
//callObj := CefToCefv8(pMessage.ArgumentList.GetValue(1));
caLength := pMessage.ArgumentList.GetInt(1);
SetLength(callArguments, caLength);
for i := 0 to caLength-1 do
callArguments[i] := CefToCefv8(pMessage.ArgumentList.GetValue(i + 2));
end;
CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_INFO, 'OnProcessMessageReceivedEvent End');
end;
Code: Select all
FIsMainProcess := False;
FProcessHandler := TCefCustomRenderProcessHandler.Create;
FProcessHandler.OnWebKitInitializedEvent := ProcessHandler_OnWebKitInitializedEvent;
FProcessHandler.AddMessageName(MSG_EXECUTE_TO_MAIN);
FProcessHandler.OnProcessMessageReceivedEvent := Instance.RenderProcessHandler_OnProcessMessageReceivedEvent;
GlobalCEFApp := TCefApplication.Create;
[...]
GlobalCEFApp.RenderProcessHandler := FProcessHandler as ICefRenderProcessHandler;
FIsMainProcess := GlobalCEFApp.StartMainProcess;