hongqizhen 2018-01-16 05:59 采纳率: 0%
浏览 1234
已结题

关于tchromium的一些疑惑

tchromium系列一直有一个问题,它的禁止下载图片选项只能在摆放控件或者第一次动态创建时设置有效,如果是动态创建的,第二次销毁后再设置禁止下载图片,不管怎么设置都会下载图片。这个是否有解?我目前的做法是打开cefgui把加载图片的选项默认值设置为禁用:
property ImageLoading: TCefState read FImageLoading write FImageLoading default STATE_DISABLED;
FImageLoading := STATE_DISABLED;
这么做的后果是,第二次动态创建时再也无法启动下载图片选项了。

再就是这个控件加载网页后的内存不会释放,会持续增加,经测试,加载3800+个网页后必然报错(libcef.dll内存读写错误,出错后哪怕销毁重建也没用,无法触发绑定的任何事件),要避免只能在3000个网页左右销毁重建,但是销毁重建后占用的内存也没被释放,并且多销毁几次会出现tchromium接不到绑定事件的破事。

tchromium内部自带了个重建浏览器的命令:
ReCreateBrowser(const url:string);
本来以为可以通过这个解决内存不释放的问题,事实证明这个命令的作用就是切断tchromium内嵌浏览器和tchromium的关联,然后再创建一个新的浏览器。证据是,使用这个命令后,网页的抓取内容动作依然在(依然可以获取到新网页的源码之类的),但是最上的这个浏览器内容不再变动,点击啥的依然能做…………而且用这个命令后,控件崩溃得更快了。

是否有什么办法能彻底销毁tchromium内嵌的浏览器控件,或者能让tchromium不再莫名其妙报内存读写错误或接不到绑定事件?求解!

附重建代码:
procedure TGetNewInfo.InitChrome(count:Integer = 0);
begin
if count = 0 then
count := 3000
else
count := iWebLoadCount;

if iWebLoadCount = count then
begin
oWeb.Parent := nil;
oWeb.OnLoadError := nil;
oWeb.OnLoadEnd := nil;
oWeb.Align := alNone;
oWeb.Free;
oWeb := TChromium.Create(nil);
oWeb.Parent := oParent;
oWeb.Options.ImageLoading := TCefState.STATE_DISABLED;
oWeb.OnLoadEnd := oChrmLoadEnd;
oWeb.OnLoadError := oChrmLoadError;
oWeb.Width := 0;
oWeb.Height := 0;
olog.pWriteLog('## 初始化浏览器 ##', iLevel);
iWebLoadCount := 0;
end;
iWebLoadCount := iWebLoadCount + 1;
end;

  • 写回答

2条回答

  • devmiao 2018-01-16 14:23
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档
  • ¥50 C++五子棋AI程序编写
  • ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。