dcef3 基本使用经验总结
加载命令启动参数 --enable-system-flash 会加载系统默认的flash浏览器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
procedure OnBeforeCmdLine( const processType: ustring; const commandLine: ICefCommandLine); begin commandLine . AppendSwitch( '--enable-system-flash' ); commandLine . AppendSwitch( '--disable-web-security' ); commandLine . AppendSwitch( 'no-proxy-server' ); end ; begin CefCache := 'cache' ; CefLocale := 'zh-CN' ; CefOnBeforeCommandLineProcessing := OnBeforeCmdLine; CefSingleProcess := False ; if not CefLoadLibDefault then Exit; Application . Initialize; Application . CreateForm(TMainForm, MainForm); Application . Run; end . |
其它cmdLine
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
procedure OnBeforeCmdLine( const processType: ustring; const commandLine: ICefCommandLine); begin //加载系统安装的flash,使用前系统需安装flash播放器 //commandLine.AppendSwitch('--enable-system-flash'); //允许js跨域 commandLine . AppendSwitch( '--disable-web-security' ); str_ip:='218.207.212.79:80'; //设置代理ip 120.203.159.18:8118 218.189.26.20:8080 commandLine.AppendSwitchWithValue('proxy-server',str_ip);
//禁用代理 //commandLine.AppendSwitch('no-proxy-server'); //不同域名不同进程 commandLine . AppendSwitch( '--process-per-site' ); //指定子进程渲染 //commandLine.AppendSwitchWithValue('browser-subprocess-path', 'cefsubprocess.exe'); //加载指定flash版本 commandLine . AppendSwitchWithValue( 'ppapi-flash-version' , '21.0.0.213' ); commandLine . AppendSwitchWithValue( 'ppapi-flash-path' , 'PepperFlash\pepflashplayer.dll' ); end ; |
拓展JS方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
TCustomRenderProcessHandler = class (TCefRenderProcessHandlerOwn) protected procedure OnWebKitInitialized; override; end ; TTestExtension = class class function hello: string ; class procedure mouseover( const data: string ); end ; procedure TCustomRenderProcessHandler . OnWebKitInitialized; begin {$IFDEF DELPHI14_UP} TCefRTTIExtension . Register( 'app' , TTestExtension); { $ENDIF } end ; class procedure TTestExtension . mouseover( const data: string ); var msg: ICefProcessMessage; begin msg := TCefProcessMessageRef . New( 'mouseover' ); msg . ArgumentList . SetString( 0 , data); TCefv8ContextRef . Current . Browser . SendProcessMessage(PID_BROWSER, msg); end ; class function TTestExtension . hello: string ; begin Result := 'Hello from Delphi' ; end ; initialization CefRemoteDebuggingPort := 9000 ; CefRenderProcessHandler := TCustomRenderProcessHandler . Create; CefBrowserProcessHandler := TCefBrowserProcessHandlerOwn . Create; |
Delphi执行JS方法
1
2
3
4
5
6
|
procedure TMainForm . actExecuteJSExecute(Sender: TObject); begin if crm . Browser <> nil then crm . Browser . MainFrame . ExecuteJavaScript( 'alert(' 'JavaScript execute works!' ');' , 'about:blank' , 0 ); end ; |
一般单进程模式是用来调试的,release版本最好是多进程模式,如果debug版本也是多进程的话,由于Browser、Rendder等进程是独立分开的,所以即便在一些函数中打上断点也进不去!而单进程话就都可以进去。至于debug版本多进程模式下为何会弹出两个主程序窗口我也不是很清楚,但是release版本多进程模式下就正常了,只有一个主程序窗口。并且多进程模式下调用CefShutdown就是OK的,app也能够正常析构,而单进程模式调用CefShutdown会直接崩溃!
另外,官方文档上说release版本单进程不是很稳定,不建议使用单进程模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构