在 CEF4 浏览器组件中使用 WebSocket 是可行的, 但是, 如果涉及到数据处理必须要能够交互,
我改写 CEF4 浏览器组件的 uCEFApplication.pas 并完成了 v8 数据交互处理
修改组件代码如下, (注册JAVA类名为 'JSExt', 类方法名为 Notify )
uses
// ...
uCEFInterfaces, uCEFRenderProcessHandler, uCEFProcessMessage,
uCEFv8Context, uCEFv8Handler;
type
TCefJavaScriptExtension = class
class procedure Notify(const msgName, msgData : string);
end;
class procedure TCefJavaScriptExtension.Notify(const msgName, msgData : string);
var
msg: ICefProcessMessage;
begin
msg := TCefProcessMessageRef.New(msgName);
msg.ArgumentList.SetString(0, msgData);
TCefv8ContextRef.Current.Browser.MainFrame.SendProcessMessage(PID_BROWSER, msg);
end;
procedure RenderProcessHandler_OnWebKitInitialized;
begin
TCefRTTIExtension.Register('JSExt', TCefJavaScriptExtension);
end;
constructor TCefApplication.Create(const APath : String);
begin
// ...
FOnWebKitInitialized := RenderProcessH