dcef3 指出一个坑

http://ju.outofmemory.cn/entry/80119

BccSafe's Blog 2014-06-11 2388 阅读
 

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 指出一个坑的更多相关文章

  1. 用html5的视频元素所遇到的第一个坑

    html5 有一个video标签,这个是被大家所熟知的事情.按照w3c的规范,我认真的写出如下代码: <video preload="auto" controls=" ...

  2. 监控jvm的一个坑

    监控jvm的一个坑 1,遇到的问题 我按照以往文档,在catalina.sh里追加jvm的监控api,如下 紧接着我启动 tomcat. 未报任何错误. 发现 lsof –i:12000, 12000 ...

  3. JavaScript中sort方法的一个坑(leetcode 179. Largest Number)

    在做 Largest Number 这道题之前,我对 sort 方法的用法是非常自信的.我很清楚不传比较因子的排序会根据元素字典序(字符串的UNICODE码位点)来排,如果要根据大小排序,需要传入一个 ...

  4. PHP中逻辑运算符and/or与||/&&的一个坑

    我原来以为PHP中的and和&&是一样的, 只是写法上为了可读性和美观, 事实上我错了. 这里面深藏了一个坑! 看以下代码: $bA = true; $bB = false; $b1  ...

  5. 困扰多日的C#调用Haskell问题竟然是Windows的一个坑

    最近一直被C#调用Haskell时的“尝试读取或写入受保护的内存”问题所困扰(详见C#调用haskell遭遇Attempted to read or write protected memory,C# ...

  6. 在VS2012中GridView的一个坑

    使用GridView的时候遇到了一个坑,一个增加一个选择按钮~貌似在某些情况下会出现一个是否允许选择的属性,貌似会默认为fals,然后就返回不了指定ID!坑,巨坑!但是今天居然找不到这个属性了,难道是 ...

  7. 【转载】linux命令行计算器bc的一个“坑”

    [转载自]http://blog.chinaunix.net/uid-174325-id-3518953.html 结论:ibase,obase可以使用在不同的计算公式里,但是尽量把obase放iba ...

  8. 使用ffmpeg视频编码过程中踩的一个坑

           今天说说使用ffmpeg在写视频编码程序中踩的一个坑,这个坑让我花了好多时间,回头想想,非常多时候一旦思维定势真的挺难突破的.以下是不对的编码结果:                   ...

  9. Jquery-全选和取消的一个坑

    在做一个商城的购物车的时候遇到了一个坑, 购物车一般都有全选按钮, 再次点击就会全部消除, 在网上查到的答案全部都是使用attr来做的, 无一例外都不能用, 之后才知道要使用jquery的prop和r ...

随机推荐

  1. FMCJ450-基于ADRV9009的射频收发模块

    FMCJ450-基于ADRV9009的射频收发模块 一.板卡概述 接收路径包括两个具有动态范围的独立式宽带宽直接转换接收器.该器件还支持宽带宽分时观察路径接收器,供在 TDD 应用中使用.完整的接收子 ...

  2. centos7部署nagios(二)

    一.Nagios简介 分类: 监控 undefined Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系 ...

  3. php正则替换非站内链接 替换zencart描述内的非本站链接

    php正则替换非站内链接 <?php //要替换的文本,比如产品描述中的文字 header("content-Type: text/html; charset=utf-8") ...

  4. 第02课:启动GDB调试

    使用GDB调试程序一般有三种方式: gdb filename gdb attach pid dgb filename corename 也对应这本节课的核心内容: 直接调试目标程序 附加进程 调试co ...

  5. Java线程与Linux内核线程的映射关系(转)

    Java线程与Linux内核线程的映射关系 Java线程与Linux内核线程的映射关系Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程 ...

  6. 微信小程序购物车功能

    <view class='shop-mana'> <text class='management'>管理您的购物车</text> <text class='g ...

  7. 阅读之SQL优化

    一.性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂的SQL语句, ...

  8. 上采样 及 Sub-pixel Convolution (子像素卷积)

    参考:https://blog.csdn.net/leviopku/article/details/84975282 参考:https://blog.csdn.net/g11d111/article/ ...

  9. Send Email

    private string SendEmail(string mailTo, string body, ref int sendresult) { string errorEmailAddress ...

  10. ps -aux显示信息COMMAND不全

    ps -aux结果: ps -auxwww结果: