dcef3 指出一个坑

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;

转载于:https://www.cnblogs.com/delphi-xe5/p/9538900.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值