dcef3 指出一个坑
dcef3 指出一个坑
http://ju.outofmemory.cn/entry/80119
dcef3提供了TChromium,可能会有人想用这个来开发游览器
可惜这个实现起来有问题
问题就出在OnBeforePopup这个事件上
很多人以为只要在这做一个拦截
让新的TChromium来加载这个新网页即可
这是一个大坑,我之前发布的游览器也是这样
get可能表面上还看不出什么问题,
但如果是个post请求,问题就大了
一个好好的post在我们这个所谓的游览器里莫名其妙的变成了get请求
所以开发游览器最好的方法就是不要去用这个TChromium
或者说凡是涉及到不是那种简单跳转网页的,都不要用TChromium
你会进坑的
自己用底层的dcef3
在这里我放出一段核心代码(参考TChromium的源码)
另外你还需要自己处理消息循环 CefDoMessageLoopWork
procedure CreateBrowser;
var
info: TCefWindowInfo;
settings: TCefBrowserSettings;
begin
if (FParentRect.IsEmpty) or (FParentHandle = 0) then Exit;
FillChar(info, SizeOf(info), 0);
info.Style := WS_CHILD or WS_VISIBLE or WS_CLIPCHILDREN or WS_CLIPSIBLINGS or WS_TABSTOP;
info.parent_window := FParentHandle;
info.x := FParentRect.left;
info.y := FParentRect.top;
info.Width := FParentRect.right - FParentRect.left;
info.Height := FParentRect.bottom - FParentRect.top;
FillChar(settings, SizeOf(TCefBrowserSettings), 0);
settings.size := SizeOf(TCefBrowserSettings);
GetSettings(settings);
{$IFDEF CEF_MULTI_THREADED_MESSAGE_LOOP}
CefBrowserHostCreate(@info, FHandler, FDefaultUrl, @settings,
TCefRequestContextRef.CreateContext((FHandler as ICefClientHandler).GetRequestContextHandler));
{$ELSE}
CefLoadLibDefault;
FBrowser := CefBrowserHostCreateSync(@info, FClientHandler, FDefaultUrl, @settings,
TCefRequestContextRef.CreateContext((FClientHandler as ICefClientHandler).GetRequestContextHandler));
FBrowserId := FBrowser.Identifier;
{$ENDIF}
end;
dcef3 指出一个坑的更多相关文章
- 用html5的视频元素所遇到的第一个坑
html5 有一个video标签,这个是被大家所熟知的事情.按照w3c的规范,我认真的写出如下代码: <video preload="auto" controls=" ...
- 监控jvm的一个坑
监控jvm的一个坑 1,遇到的问题 我按照以往文档,在catalina.sh里追加jvm的监控api,如下 紧接着我启动 tomcat. 未报任何错误. 发现 lsof –i:12000, 12000 ...
- JavaScript中sort方法的一个坑(leetcode 179. Largest Number)
在做 Largest Number 这道题之前,我对 sort 方法的用法是非常自信的.我很清楚不传比较因子的排序会根据元素字典序(字符串的UNICODE码位点)来排,如果要根据大小排序,需要传入一个 ...
- PHP中逻辑运算符and/or与||/&&的一个坑
我原来以为PHP中的and和&&是一样的, 只是写法上为了可读性和美观, 事实上我错了. 这里面深藏了一个坑! 看以下代码: $bA = true; $bB = false; $b1 ...
- 困扰多日的C#调用Haskell问题竟然是Windows的一个坑
最近一直被C#调用Haskell时的“尝试读取或写入受保护的内存”问题所困扰(详见C#调用haskell遭遇Attempted to read or write protected memory,C# ...
- 在VS2012中GridView的一个坑
使用GridView的时候遇到了一个坑,一个增加一个选择按钮~貌似在某些情况下会出现一个是否允许选择的属性,貌似会默认为fals,然后就返回不了指定ID!坑,巨坑!但是今天居然找不到这个属性了,难道是 ...
- 【转载】linux命令行计算器bc的一个“坑”
[转载自]http://blog.chinaunix.net/uid-174325-id-3518953.html 结论:ibase,obase可以使用在不同的计算公式里,但是尽量把obase放iba ...
- 使用ffmpeg视频编码过程中踩的一个坑
今天说说使用ffmpeg在写视频编码程序中踩的一个坑,这个坑让我花了好多时间,回头想想,非常多时候一旦思维定势真的挺难突破的.以下是不对的编码结果: ...
- Jquery-全选和取消的一个坑
在做一个商城的购物车的时候遇到了一个坑, 购物车一般都有全选按钮, 再次点击就会全部消除, 在网上查到的答案全部都是使用attr来做的, 无一例外都不能用, 之后才知道要使用jquery的prop和r ...
随机推荐
- MySQL主备同步延迟
今天看到mycat的日志,发现在wrapper.log中频繁warning:slave延迟23006秒 查看数据指标: show engine innodb status正常,而且slave的拷贝点在 ...
- 2019-11-29-dotnet-获取指定进程的输入命令行
title author date CreateTime categories dotnet 获取指定进程的输入命令行 lindexi 2019-11-29 08:35:11 +0800 2019-0 ...
- Hive的基本介绍(一)
01 Hive的基本介绍 1.hive产生的原因 · a) 方便对文件及数据的元数据进行管理,提供统一的元数据管理方式 b) 提供更加简单的方式来访问大规模的数据集,使用SQL语言进行数据分析 2 ...
- 百度贴吧自动回帖的两种方式,使用requests(urllib2)和selenium两种方式回帖
本文介绍,回复贴吧指定某楼层主的帖子的方法.在这里不介绍无限发主贴和无限回复主贴的方法,无限发主题帖会爆吧,引起别人的反感,并且很容易遭到吧主的封杀:无限回主题帖,会让整个帖子的每楼的回复充满了自己的 ...
- 校内题目T2695 桶哥的问题——吃桶
同T2一样外校蒟蒻可能没看过: 题目描述: 题目背景 @桶哥 桶哥的桶没有送完. 题目描述 桶哥的桶没有送完,他还有n个桶.他决定把这些桶吃掉.他的每一个桶两个属性:种类aia_iai和美味值bib ...
- 第02课:启动GDB调试
使用GDB调试程序一般有三种方式: gdb filename gdb attach pid dgb filename corename 也对应这本节课的核心内容: 直接调试目标程序 附加进程 调试co ...
- Linux下vim显示行数
在Linux环境下的编辑器有vi.vim.gedit等等.进入这些编辑器之后,为了方便我们需要编辑器显示出当前的行号,可偏偏编辑器默认是不会显示行号的.我们有二种办法可以解决: 第一种是,手动显示:在 ...
- JQuery 时间戳转时间
JQuery 时间戳转时间 var date = new Date(stocks[i]['create_time'] * 1000); var y = date.getFullYear(); var ...
- Struts 2 实现Action的几种方式_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 Action用于处理用户的请求,因此也被称为业务控制器.每个Action类就是一个工作单元,Struts 2框架负责将用 ...
- 使用tensorflow训练word2vec
from http://blog.csdn.net/wangyangzhizhou/article/details/77530479?locationNum=1&fps=1 使用了tensor ...